こんにちは ![]()
Discourse のテーマと ember.js は初めてで、現在、メインのウェブサイトからのナビゲーション項目を持つテーマに取り組んでいます。
ナビゲーション項目 JSON は AJAX リクエストから取得され、2 つの場所に表示する必要があります。
1 番目の場所は header-buttons:before です。これは api.decorateWidget を使用し、site-header:force-refresh の appEvents をトリガーすることで実現できました。
ajax( settings.site_navigation_links_endpoint ).then((result) => {
if (!result.length) {
return;
}
result.map((customHeaderLinksArray) => {
const anchorAttributes = {
title : customHeaderLinksArray.title,
href : customHeaderLinksArray.url,
target : "self"
};
headerLinks.push(
h(
`li.custom-header-nav-item`,
h( "a.custom-header-nav-item-link", anchorAttributes, customHeaderLinksArray.title )
)
);
});
headerNav = h("ul.custom-header-nav", headerLinks);
if( settings.site_navigation_position == "inline" ) {
api.decorateWidget("header-buttons:before", (helper) => {
return headerNav;
});
}
appEvents.trigger("site-header:force-refresh");
// 場所 (2番目の場所、下記参照) に表示するには
// ...
// ...
}
2 番目の場所は、below-site-header の pluginOutlet を介します。
これはウィジェットではないため、api.decorateWidget と同じことはできないと思います。
私の質問は次のとおりです。
- AJAX コンテンツを pluginOutlet に手動で挿入するにはどうすればよいですか?
- AJAX 呼び出し後に仮想 DOM をオンザフライでコンパイルする方法も知りたいですか?たとえば、上記の変数
headerNavをコンパイルされた HTML マークアップで取得したいです。どのライブラリ/関数を使用すればよいかわかりません。 - 可能であれば、pluginOutlet を再レンダリングする方法は?
appEvents.trigger("site-header:force-refresh");と似ていますか?
よろしくお願いします ![]()