作为我们将 Discourse 升级到最新 Ember 版本项目的一部分,我们一直在对 Discovery(又名“主题列表”)路由进行重大重构。
此主题面向主题/插件开发者,旨在列出可能受重构影响的主题/插件活动类型。
背景
进行此重构是必要的,因为现代 Ember 不再支持我们在此类路由中广泛使用的“命名出口”,例如 {{outlet \"topics\"}}。基本上,以前渲染到命名出口的所有控制器/模板都已转换为组件。
在此过程中,我们还借此机会对相关代码进行了现代化和整合(例如,所有类型的 Discovery 路由现在共享相同的控制器和模板)。
核心部分的更改尚未最终确定,但可以在此分支上找到正在进行的工作。我们没有具体的合并日期,但预计将在未来几周内完成。如果您有任何疑问或疑虑,请告知我们!
哪些主题/插件活动会受到影响?
此重构主要影响“控制器”层。路由基本保持不变,从 <TopicList /> 组件开始的所有内容也未受影响。
我们预计唯一的影响将是那些深入核心代码(例如,通过 modifyClass 和模板覆盖)的主题/插件。定义的 API 和出口未受影响。
模板覆盖
这些模板已被重构为组件。任何现有的覆盖将静默停止工作
navigation/categoriesnavigation/categorynavigation/defaultnavigation/filterdiscovery/topics
这些模板已被大量重构。任何现有的模板覆盖都可能导致站点出现灾难性错误。
discoverytag/showuser-topics-listuser/messagesdiscovery/categoriescomponents/basic-topic-listcomponents/d-navigation
技术上,可以覆盖新引入的模板。但是,不建议覆盖模板,并且正在淘汰。
因此,应删除所有模板覆盖,并替换为更强大的扩展 API(例如插件出口)。如果您正在做的事情似乎无法通过 Discourse 现有的扩展点实现,请告知我们!
modifyClass 和 lookup() 调用
这些类已不存在。modifyClass 将静默停止工作。查找将返回 null(因此可能导致错误)。在最常见的情况下,我们引入了向后兼容的垫片(参见脚注)
controller:discoverycontroller:discovery/topics[^dis-top-shim]controller:discovery-sortable(->controller:discovery/list)controller:discovery-filter(->controller:discovery/filter)controller:navigation/categoriescontroller:navigation/category[^nav-cat-shim]controller:navigation/defaultcontroller: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/discoveryroute/discovery.*route/tag-show
路由
路由名称(即 router.currentRouteName)保持不变
Discovery 路由 model() 钩子(即 router.currentRoute.attributes)基本保持不变
插件出口
所有插件出口及其参数均保持不变。
HTML / CSS
HTML 结构和类基本不受影响