Meteor:从 Iron Router 传递给模板的数据在第一次加载时为空

Meteor: data passed to template from Iron Router, is empty at first load

我遇到了一个奇怪的问题。 我正在使用 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 }
          }
        });
      }
    });

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

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

在第一次加载页面时,如果我直接键入页面的 url,则没有任何项目。 如果我在浏览器控制台中键入 Hospitals.find({}).fetch()(不安全处于活动状态),它 return 一个空对象。

但如果我更改页面,在网站上浏览一段时间,return 列表页面,项目就会出现。

有什么想法吗?

在服务器文件夹中,添加 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 }
      }
    });
  }
});