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

Issue with publishing and subscribing product detail attributes in meteor / iron router

我在正确发布、订阅和显示产品详情页面时遇到问题。我有一个 Products 集合,其属性称为 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();

返回未定义...请帮助!!

谢谢!

发布者需要 return 一个游标或一个游标数组。 findOne returns 一个文档。此外,您的发布商无权访问 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>