2014-08-29 29 views
4

在我的meteor.js应用程序中,我动态加载模板;在Meteor.js中动态加载模板时等待数据

{{#DynamicTemplate template=getTemplate data=getData}} 
    Default content when there is no template. 
    {{/DynamicTemplate}} 

当我加载子模板时,是否有可能等待呈现子模板,直到子模板的数据准备好来自getData?我的意思是有一些像waitOn铁路路由器的功能,我可以做什么?谢谢

回答

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(); 
    }); 
    } 
}); 

相似的方法也可以用于其它数据源(例如方法)。

+0

我该如何做多个订阅并阻止它们销毁? – user2858924 2014-09-02 11:18:28

+0

我编辑它以显示多个订阅。 – user3374348 2014-09-02 11:37:08

+0

感谢您的快速响应 – user2858924 2014-09-02 17:11:26

0

现在,您可以在模板

在js代码Template.instance().subscriptionsReady()使用{{#if Template.subscriptionsReady}}。当然,您可以使用this关键字作为当前模板的参考。