如何在显示内容之前等待流星中的子数据

时间:2015-08-18 16:57:03

标签: meteor spacebars

我的网页上有一个部分,其中包含用户拥有的10个游戏。游戏使用gameId附加到他们的成就。目前,我正在单独订阅每个游戏的成就。这是通过使用{{#each gamesList}} {{> oneGame}} {{/each}}Template.oneGame.onCreated = function() { this.subscribe('gameAchievements', this.data.gameId); }完成的。在这种情况下,gamesList是一个返回10个订阅游戏记录的助手。这适用于获取数据并显示它,但我在创建加载屏幕时遇到问题,该加载屏幕将显示直到每个子订阅(对于10个游戏中的每个游戏的成就)。如何在父模板上显示加载微调器,直到它的所有子订阅都完成加载?

2 个答案:

答案 0 :(得分:2)

如果您使用的是铁路由器,可以在“铁路由器指南”(http://iron-meteor.github.io/iron-router/)中查看waitOn

以下是该指南中的代码:

Router.route('/post/:_id', {
  // this template will be rendered until the subscriptions are ready
  loadingTemplate: 'loading',

  waitOn: function () {
    // return one handle, a function, or an array
    return Meteor.subscribe('post', this.params._id);
  },

  action: function () {
    this.render('myTemplate');
  }
});

然后在你的'loading'模板,你可以使用sacha:spin包(https://atmospherejs.com/sacha/spin)来显示一个微调器。

答案 1 :(得分:0)

我建议你通过将 gameAchievements gameList 游标一起返回来规避这种复杂性和延迟吗?使用reywood:publish-composite与父项同时运行从属查询。然后你可以使用@jbryant04的答案来处理微调器,同时等待 gameList 订阅完成。您将看到更少的网络往返,您的代码将更加简单。