saurabhmasc
(Saurabh Khandelwal)
1
こんにちは、皆様。
私は、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 クラスも同じように修正することは可能でしょうか?
justin
(Justin DiRose)
2
これが可能だと信じています——route:route-name で動作すると思います。試されましたか?
saurabhmasc
(Saurabh Khandelwal)
3
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
Johani
(Joe)
4
これは、コード内で 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