Discourse を Ember の最新バージョンにアップグレードするプロジェクトの一環として、Discovery (別名「トピックリスト」) ルートの大幅なリファクタリングに取り組んでいます。
このトピックは、テーマ/プラグイン開発者を対象としており、リファクタリングの影響を受ける可能性のあるテーマ/プラグインの活動の種類をリストアップすることを目的としています。
背景
このリファクタリングは、最新の Ember が {{outlet \"topics\"}} のような「名前付きアウトレット」をサポートしなくなったために必要となりました。これらのルートでは、名前付きアウトレットを広範囲に使用していました。基本的に、以前は名前付きアウトレットにレンダリングされていたすべてのコントローラー/テンプレートがコンポーネントに変換されました。
その過程で、関連コードのモダナイズと統合の機会を得ました (例: すべてのタイプのディスカバリルートが同じコントローラーとテンプレートを共有するようになりました)。
コアでの変更の実装はまだ完了していませんが、作業中のものはこのブランチで見つけることができます。マージの具体的な日付は未定ですが、数週間以内になると予想しています。ご質問や懸念事項があれば、お知らせください。
どのテーマ/プラグイン活動が影響を受けますか?
このリファクタリングは、主に「コントローラー」レイヤーに影響します。ルートはほとんど変更されておらず、\u003cTopicList /\u003e コンポーネント以下のすべては影響を受けません。
影響は、コアコードに深くアクセスしている (例: 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[1]controller:discovery-sortable( -\u003econtroller:discovery/list)controller:discovery-filter( -\u003econtroller:discovery/filter)controller:navigation/categoriescontroller:navigation/category[2]controller:navigation/defaultcontroller:tag/show[3]controller:discovery.*( -\u003econtroller:discovery/list)
これらのクラスは大幅にリファクタリングされました。modifyClass およびルックアップ呼び出しのリファクタリングが必要になる場合があります。
route/discoveryroute/discovery.*route/tag-show
ルート
ルート名 (つまり router.currentRouteName) は変更されていません。
Discovery ルートの model() フック (つまり router.currentRoute.attributes) は、ほとんど変更されていません。
プラグインアウトレット
すべてのプラグインアウトレットとその引数は変更されていません。
HTML / CSS
HTML 構造とクラスは、ほとんど影響を受けていません。