无法访问数据中的this.params变量:铁路由器中的属性

Mar*_*inH 0 javascript meteor iron-router

当url是/ company/martin时,以下代码不起作用:

 this.route('scheduledTasks', {
    path: '/company/:name',
    data: {
      items:
      function(){
        return scheduledTasks.find({company: this.params.name});
      }
    }
Run Code Online (Sandbox Code Playgroud)

虽然这确实有效:

 this.route('scheduledTasks', {
    path: '/company/:name',
    data: {
      items:
      function(){
        return scheduledTasks.find({company: "martin"});
      }
  }
Run Code Online (Sandbox Code Playgroud)

我尝试了几个解决方案,但似乎this.params.name不存在或无法访问?

Dav*_*don 5

this.params.name需要在路径的上下文中进行评估,我相信只有data在函数而不是对象文字的情况下才会发生.试试这个:

this.route('scheduledTasks', {
  path: '/company/:name',
  data: function() {
    var company = this.params.name;
    return {
      items: function() {
        return scheduledTasks.find({company: company});
      }
    };
  }
});
Run Code Online (Sandbox Code Playgroud)

  • `this`的值根据函数的计算方式而变化.根据[ir docs](https://github.com/EventedMind/iron-router#data),如果`data`是一个函数,它将在路由运行时进行评估,因此您可以访问`params`.如果数据是一个对象文字,它将在稍后由模板进行评估(`this`将是一个模板实例),因此无法访问`params`.在上面的解决方案中,我们通过将`name`值绑定到一个变量来避免这个问题,该变量在被调用时可用于`find`. (2认同)