在流星/铁路由器中发布和订阅产品详细信息属性的问题

时间:2015-04-02 19:30:34

标签: javascript meteor controller router

我无法正确发布,订阅和显示产品详细信息页面。我有一个名为productCode的属性的产品集合。这是我的产品系列:

Products = new Mongo.Collection('products');

这是我的publish.js:

Meteor.publish('tireDetails'), function(_id) {
return {
    products: Products.findOne({_id: this.params._id})
};
};

这是我的控制器:

tireDetailsController = RouteController.extend({
waitOn: function () { 
    Meteor.subscribe('tireDetails');
},
action: function() {
    this.render('tireDetails');
}

});

我的router.js:

Router.route('/products/tires/:_id', {name: 'tireDetails', controller: 'tireDetailsController'});

这是我的模板:

<template name="tireDetails">
  {{#with products}}
      <p>{{productCode}}</p>
  {{/with}}
</template>

我认为我发布产品的方式是错误的。此外,我输入了浏览器控制台:

Products.findOne();

哪个返回undefined ...请帮助!!

谢谢!

1 个答案:

答案 0 :(得分:1)

发布者需要返回游标或游标数组。 findOne返回一份文件。此外,您的发布商无权访问this.params._id。尝试这样的事情:

Meteor.publish('tireDetails', function(id) {
  return Products.find(id);
});

并且您的waitOn应如下所示:

waitOn: function() {
  Meteor.subscribe('tireDetails', this.params._id);
}

为了让product呈现给您的模板,您可以向控制器添加data参数:

data: function() {
  return {product: Products.findOne(this.params._id})};
}

然后在你的模板中:

<template name="tireDetails">
  <p>{{product.productCode}}</p>
</template>