Javascript Meteor iron路由器中路由器中的上下文变量
我有一个Javascript Meteor iron路由器中路由器中的上下文变量,javascript,node.js,meteor,iron-router,Javascript,Node.js,Meteor,Iron Router,我有一个ProjectController在iron router中。我想确保project:Projects.findOne(this.params.\u id)在使用ProjectController的路由上的所有模板中都可用 我怎样才能得到这个?现在我用 ProjectController = ApplicationController.extend({ layoutTemplate: "projectLayout", waitOn: function () { retur
ProjectController
在iron router
中。我想确保project:Projects.findOne(this.params.\u 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();
},
});
但是,在我设置了
数据
的新路由上,ProjectController
中的数据
被覆盖,因此项目
模板变量不再可用。一种解决方案可以是对使用控制器的路由使用另一种自定义数据方法。例如,使用名为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
将被覆盖(它也应该被覆盖,因为它只是控制器中的一个存根),并将为realdata
方法提供所需的额外数据,它将始终包括您的项目
对象。每次在我的一条路线中使用waitOn
时,我是否会从控制器中重写waitOn
?并且使用此结构,我必须依赖projectId始终设置为相同名称(此.params.\u id
)。在项目中,如果子菜单仅显示在与项目/用户/等相关的特定页面上,是否就是这样做的。?