Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor iron路由器中路由器中的上下文变量_Javascript_Node.js_Meteor_Iron Router - Fatal编程技术网

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
将被覆盖(它也应该被覆盖,因为它只是控制器中的一个存根),并将为real
data
方法提供所需的额外数据,它将始终包括您的
项目
对象。

每次在我的一条路线中使用
waitOn
时,我是否会从控制器中重写
waitOn
?并且使用此结构,我必须依赖projectId始终设置为相同名称(
此.params.\u id
)。在项目中,如果子菜单仅显示在与项目/用户/等相关的特定页面上,是否就是这样做的。?