お気づきの点が抜けているかもしれませんが、もしそうであれば、事前に謝罪いたします。
私のプラグインには、コンポーザーでトグルスイッチを表示/非表示するために使用される、各カテゴリのカスタム設定があります。トグルスイッチは、イニシャライザーによって呼び出され、composer-fields プラグインのアウトレットにレンダリングされるグリマーコンポーネントで設定されています。
私の目標は、コンポーザー内でカテゴリが変更されたときに、そのカテゴリに関連付けられたカスタム設定の値に応じて、コンポーザーがトグルスイッチを表示/非表示するようにすることです。
プラグインアウトレットの outletArgs にオブザーバーを追加することは可能ですか?コンポーザーモデルは outletArgs で設定されているため、そこから categoryId を通じてオブザーバーを設定することを考えていました。その後、カテゴリのカスタム設定の値を確認する関数を実行します。しかし、オブザーバーの設定に苦労しています。EmberJS にはあまり慣れていないため、設定方法が間違っている可能性があります。
または、これを達成するための別の方法はありますか?
参考までに、現在 Discourse v3.4.7 を実行しています。
Moin
2
GitHub - discourse/discourse-custom-composer-placeholders がその方法の例として機能すると思います。
これは、カテゴリに基づいてコンポーザーのプレースホルダーを変更し、変更時にも機能します。
このソリューションを試しましたが、残念ながら私がビルドしているバージョンには、composer-editor-reply-placeholder が欠けている初期化済みトランスフォーマーの古いリストが含まれているようです。
もう少し詳しく説明すると、registerConnectorClass API の廃止後、プラグイン機能を Glimmer コンポーネントを使用するようにリファクタリングしています。以下のコードは、元々設定されていたものです。
export default {
initialize(container) {
withPluginApi("1.6.0", api => {
api.registerConnectorClass("composer-fields", "handlebars-template-name", {
setupComponent(attrs, component) {
const model = attrs.model;
const controller = api.container.lookup("controller:composer");
if (controller) {
controller.addObserver("model.categoryId", this, function() {
// showToggle と isRestricted の値を設定するロジック
let props = {
showField: showToggle && isRestricted,
}
component.setProperties(Object.assign(props));
})
}
}
}
Glimmer コンポーネントから同じ機能を得る別の方法はありますか?特に、モデルや categoryId の変更を監視することについてです。