你好 ![]()
我是 Discourse 主题和 emberjs 的新手,目前正在开发一个包含主网站导航项的主题。
导航项 JSON 来自一个 ajax 请求,我需要在两个位置显示它。
第一个位置是 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");
// To display on location (2nd location, see below )
// ...
// ...
}
第二个位置是通过 pluginOutlet below-site-header。
我认为我不能像上面那样使用 api.decorateWidget,因为这是一个 pluginOutlet 而不是 widget (?)。
我的问题是:
- 如何手动将 ajax 内容插入到 pluginOutlet?
- 我还想知道如何在 ajax 调用后即时编译 virtual-dom?例如上面的变量
headerNav,我想获得它的编译后的 HTML 标记。不确定使用哪个库/函数。 - 如果可能,如何重新渲染 pluginOutlet?类似于
appEvents.trigger("site-header:force-refresh");
提前感谢!![]()