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