# 2023年11月 - 重构Discovery路线：这会如何影响我的主题/插件？

**URL:** <https://meta.discourse.org/t/november-2023-refactoring-discovery-routes-how-will-it-affect-my-theme-plugin/282816>\
**Category:** Development\
**Tags:** dev-news\
**Created:** [2023 年10 月 19 日 17:25 UTC](https://meta.discourse.org/t/november-2023-refactoring-discovery-routes-how-will-it-affect-my-theme-plugin/282816 "2023-10-19T17:25:57Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

作者： ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)\
发布日期： [2023 年10 月 19 日 17:25 UTC](https://meta.discourse.org/t/november-2023-refactoring-discovery-routes-how-will-it-affect-my-theme-plugin/282816/1 "2023-10-19T17:25:58Z")

</div>

作为我们将 Discourse 升级到最新 Ember 版本项目的一部分，我们一直在对 Discovery（又名“主题列表”）路由进行重大重构。

此主题面向主题/插件开发者，旨在列出可能受重构影响的主题/插件活动类型。

# 背景

进行此重构是必要的，因为现代 Ember 不再支持我们在此类路由中广泛使用的“命名出口”，例如 `{{outlet \"topics\"}}`。基本上，以前渲染到命名出口的所有控制器/模板都已转换为组件。

在此过程中，我们还借此机会对相关代码进行了现代化和整合（例如，所有类型的 Discovery 路由现在共享相同的控制器和模板）。

核心部分的更改尚未最终确定，但可以在[此分支](https://github.com/discourse/discourse/pull/22622)上找到正在进行的工作。我们没有具体的合并日期，但预计将在未来几周内完成。如果您有任何疑问或疑虑，请告知我们！

 

# 哪些主题/插件活动会受到影响？

此重构主要影响“控制器”层。路由基本保持不变，从 ` <TopicList />` 组件开始的所有内容也未受影响。

我们预计唯一的影响将是那些深入核心代码（例如，通过 `modifyClass` 和模板覆盖）的主题/插件。定义的 API 和出口未受影响。

## 模板覆盖

🤫 这些模板已被重构为组件。任何现有的覆盖将静默停止工作

- `navigation/categories`
- `navigation/category`
- `navigation/default`
- `navigation/filter`
- `discovery/topics`

💥 这些模板已被大量重构。任何现有的模板覆盖都可能导致站点出现灾难性错误。

- `discovery`
- `tag/show`
- `user-topics-list`
- `user/messages`
- `discovery/categories`
- `components/basic-topic-list`
- `components/d-navigation`

技术上，可以覆盖新引入的模板。但是，不建议覆盖模板，并且[正在淘汰](https://meta.discourse.org/t/overriding-discourse-templates-from-a-theme-or-plugin/247487)。

因此，应删除所有模板覆盖，并替换为更强大的扩展 API（例如插件出口）。如果您正在做的事情似乎无法通过 Discourse 现有的扩展点实现，请告知我们！

## `modifyClass` 和 `lookup()` 调用

🗑 这些类已不存在。`modifyClass` 将静默停止工作。查找将返回 null（因此可能导致错误）。在最常见的情况下，我们引入了向后兼容的垫片（参见脚注）

- `controller:discovery`
- `controller:discovery/topics`[^dis-top-shim]
- `controller:discovery-sortable` (-\> `controller:discovery/list`)
- `controller:discovery-filter` (-\> `controller:discovery/filter`)
- `controller:navigation/categories`
- `controller:navigation/category` [^nav-cat-shim]
- `controller:navigation/default`
- `controller:tag/show` [^tag-show-shim]
- `controller:discovery.*` (-\> `controller:discovery/list`)

[^dis-top-shim]：对“model”属性的只读访问已通过弃用通知进行了垫片处理  
[^nav-cat-shim]：对“category”属性的只读访问已通过弃用通知进行了垫片处理  
[^tag-show-shim]：对“tag”属性的只读访问已通过弃用通知进行了垫片处理

🧑‍💻 这些类已进行了大量重构。`modifyClass` 和 `lookup` 调用可能需要重构：

- `route/discovery`
- `route/discovery.*`
- `route/tag-show`

## 路由

🛣 路由名称（即 `router.currentRouteName`）保持不变

📋 Discovery 路由 `model()` 钩子（即 `router.currentRoute.attributes`）基本保持不变

## 插件出口

🔌 所有插件出口及其参数均保持不变。

## HTML / CSS

🎨 HTML 结构和类基本不受影响

---

_[View the full topic](https://meta.discourse.org/t/november-2023-refactoring-discovery-routes-how-will-it-affect-my-theme-plugin/282816)._
