2014-08-29 55 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關鍵字作爲當前模板的參考。