Meteor:从Iron Router传递到模板的数据在首次加载时为空

时间:2015-06-14 00:08:40

标签: meteor iron-router

我面临一个奇怪的问题。 我使用Iron Router控制器将数据传递给模板:

Router.route('/wards/add/:_id?', {name: 'wards.add', controller: 'WardAddController'});

    WardAddController = RouteController.extend({
      action: function() {
        this.render('addWard', { 
          data: function(){
            return { hospitals : Hospitals.find({}), hospital_id : this.params._id }
          }
        });
      }
    });

我返回一个变量' hospital',它应该包含所有的收集数据。 模板:

<div class="jumbotron">
    {{#each hospitals}}
        {{name}}<br>
    {{/each}}
</div>

在第一页加载时,如果我直接输入页面的网址,则没有项目。 如果我在浏览器控制台中输入Hospitals.find({})。fetch()(不安全是活动的),它将返回一个空对象。

但是,如果我更改页面,在网站上浏览一段时间,并返回列表页面,则会显示项目。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在服务器文件夹中,添加publish.js并在其中添加:

Meteor.publish('hospitals', function() {
  return Hospitals.find({});
});

然后尝试从您的控制器订阅医院:

WardAddController = RouteController.extend({
  action: function() {
    this.render('addWard', { 
      waitOn: function() {
        return [
              Meteor.subscribe('hospitals')
           ];
      },
      data: function(){
        return { hospitals : Hospitals.find({}), hospital_id : this.params._id }
      }
    });
  }
});