Ember ルートクラスの修正方法

こんにちは、皆様。
私は、Controller や Component クラスを pluginAPI を使って修正するのと同じ方法で、Ember Route クラス(/app/assets/javascripts/discourse/routes/tags-show.js.es6)を修正したいと考えています。

Composer.js.es6 のコントローラーを修正する例は以下の通りです:

<script type="text/discourse-plugin" version="0.8">
  api.modifyClass('controller:composer', {
    actions: {
        newActionHere() { }
   }
});
</script>

Ember Route クラスも同じように修正することは可能でしょうか?

これが可能だと信じています——route:route-name で動作すると思います。試されましたか?

route:route-name は動作しますが、以下のようにアクション createTopic をオーバーライドしようとすると:

<script type="text/discourse-plugin" version="0.8">
  api.modifyClass('route:tags-show', {
    actions: {
     createTopic() {
      const controller = this.controllerFor("tags.show");

      if (controller.get("list.draft")) {
        this.openTopicDraft(controller.get("list"));
      } else {
        this.controllerFor("composer")
          .open({
            categoryId: controller.get("category.id"),
            action: Composer.CREATE_TOPIC,
            draftKey: controller.get("list.draft_key"),
            draftSequence: controller.get("list.draft_sequence")
          })
          .then(() => {
            // タグ入力フィールドに事前入力
            if (controller.get("model.id")) {
              const composerModel = this.controllerFor("composer").get("model");

              composerModel.set(
                "tags",
                _.compact(
                  _.flatten([
                    controller.get("model.id"),
                    controller.get("additionalTags")
                  ])
                )
              );
            }
          });
      }
    }
}
 });
</script>   

以下のエラーが発生します:
ReferenceError: Composer is not defined

これは、コード内で Composer が定義されていないために発生します。tags-show ルートを見ると、Composer が上部で定義されていることがわかります。

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/routes/tags-show.js.es6#L2

ただし、テーマのスクリプトタグ内でこれを行っている場合、import は使用できません。代わりに require を使用する必要があります。

したがって、コードの上部に以下のような記述を追加すれば動作するはずです。

const Composer = require("discourse/models/composer");

とはいえ、以下の記事を読んで少し時間を費やして、新しいテーマ作成の方法を実験することを強くお勧めします。

そうすれば、コアの例をより簡単に追うことができます。

「いいね!」 5