ProjectController
中有iron-router
。我想确保project: Projects.findOne(this.params._id)
在使用ProjectController
的路线上的所有模板中都可用。
我怎样才能获得这个?现在我用
ProjectController = ApplicationController.extend({
layoutTemplate: "projectLayout",
waitOn: function () {
return Meteor.subscribe('singleProject', this.params._id);
},
data: function () {
return {
project: Projects.findOne(this.params._id),
}
},
action: function () {
this.state.set('projectId', this.params._id);
this.render();
},
});
但是,在我设置data
的新路线上,data
中的ProjectController
被覆盖,因此project
模板变量不再可用。
答案 0 :(得分:0)
一种解决方案可能是使用控制器为路由使用另一种自定义数据方法。例如,使用名为getData
的方法,将其添加到控制器并在data
方法中调用它:
ProjectController = ApplicationController.extend({
layoutTemplate: "projectLayout",
waitOn: function () {
return Meteor.subscribe('singleProject', this.params._id);
},
getData: function () {
return {};
}
data: function () {
return _.extend({
project: Projects.findOne(this.params._id)
}, this.getData());
},
action: function () {
this.state.set('projectId', this.params._id);
this.render();
},
});
然后在您的路线中使用getData
代替data
!它应该像魅力一样工作:getData
将被覆盖(因为它只应该是控制器中的存根),并且将为真正的data
方法提供所需的附加数据,将始终包含您的project
对象。