当Blaze重用模板时,如何触发Template#onRendered或等效模板?
我有一个基于<select>
元素的jQuery UI selectmenu小部件,其<option>
个子元素是使用{{#each}}
创建的(针对一个帮助器,它使用Session
来获取反应性)和Blaze模板。我正在刷新选择菜单onRendered。
<option>{{text}}</option>
)console.log()
检查并在浏览器控制台中手动设置。{{#each}}
正在运行(检查隐藏的<select>
表明其选项已正确更新)只是模板正在被重用,所以尽管一切都正常,只要Session
选项上下文发生变化就有更多选项(onRendered()
在新模板实例之后被调用如果Session
选项上下文更改为具有相同或更少的选项(更少的选项仅调用onDestroyed()
,则jQuery UI selectmenu不准确(不与上下文的当前状态保持同步)相同数量的选项甚至不能做到这一点。
答案 0 :(得分:0)
解决方案:帮助器内部使用Tracker.afterFlush(callback)
(每次我预期会调用 )而不是Tempate.on_ [anything] _()。
https://docs.meteor.com/api/tracker.html#Tracker-afterFlush
e.g。
myContextOptionsHelper: function () {
let context = Session.get('myContext');
let contextOptions = app.client.tempdata.contextOptions[context];
Tracker.afterFlush(() => {
if ($('#mySelectmenu').is(':ui-selectmenu')) {
$('#mySelectmenu').selectmenu('refresh');
}
});
return contextOptions;
}