在我的meteor.js应用程序中,我正在动态加载模板;
{{#DynamicTemplate template=getTemplate data=getData}}
Default content when there is no template.
{{/DynamicTemplate}}
当我加载子模板时,是否可以等待渲染子模板,直到子模板的数据准备好来自getData?我的意思是有什么像铁路由器的waitOn功能,我能做什么?谢谢
答案 0 :(得分:3)
您可以采用的方法是在模板的created
函数中进行订阅,然后在渲染模板时,首先检查每个订阅的ready()
,如果它们都不是全部,则渲染加载显示
<template name="templateWithSubscription">
{{#if ready}}
<!-- actual content -->
{{else}}
loading...
{{/if}}
</template>
Template.templateWithSubscription.created = function () {
this.subscriptions = [
Meteor.subscribe(/* ... */),
Meteor.subscribe(/* ... */),
/* ... */
];
};
Template.templateWithSubscription.destroyed = function () {
_.each(this.subscriptions, function (sub) {
sub.stop();
});
};
Template.templateWithSubscription.helpers({
ready: function () {
return _.all(Template.instance().subscriptions, function (sub) {
return sub.ready();
});
}
});
类似的方法可用于其他数据源(例如方法)。
答案 1 :(得分:0)
您现在可以在模板中使用{{#if Template.subscriptionsReady}}
或
js代码中的 Template.instance().subscriptionsReady()
。当然,您可以使用this
关键字作为当前模板的参考。