2015-02-11 61 views
0

我一直在做我的第一个Meteor.js项目,这基本上是一个简单的博客,我不认为我明白Router.route()内部正确发生了什么。参数未定义在Router.route数据

client.js

Router.route('/category/:_category', { 
    template: 'category', 
    layoutTemplate: 'ApplicationLayout', 
    waitOn: function() { 
    return Meteor.subscribe('categorizedPosts', this.params._category); 
    }, 
    data: { 
    posts: Posts.find(), 
    // THE LINE BELOW IS THE PROBLEM 
    category: this.params._category 
    } 
}); 

此代码给我的Uncaught TypeError: Cannot read property '_category' of undefined错误在里面posts指定行。没有这条线,我的路线工作正常,但我失去了我的category数据。

从路线的事实,我知道行return Meteor.subscribe('categorizedPosts', this.params._category);waitOn()里面工作正常,这意味着它正确抓住this.params._category

解决方案

我已经从答案中改变了一点我的代码。

data: function() { 
    return { 
    posts: Posts.find(), 
    category: this.params._category 
    } 
} 

回答

1

更改为此。

data:function(){ 
    var category = this.params._category 
    console.log(category) 
    return Posts.find() 
    } 

在这里,我们改变data context反对到功能

+0

我刚刚从编辑你的答案我的代码,但我可以问,为什么它的工作原理,功能块内?这是这个范围的问题吗? – 2015-02-11 02:52:28

+0

好的,如果我们在一个函数范围内使用'this'关键字,那么这个问题就出现在'this'关键字上了,如果你将'this'放入一个对象'this.params ''将不再存在'this'现在将成为模板实例,如果将'this'放入函数中,您将获得'params',如果您将'this'放在一个对象中,您将获得模板实例 – Ethaan 2015-02-11 02:58:43