在Meteor.js中动态加载模板时等待数据

时间:2014-08-29 08:47:47

标签: meteor iron-router

在我的meteor.js应用程序中,我正在动态加载模板;

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

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

2 个答案:

答案 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关键字作为当前模板的参考。