在流星/铁路由器中发布和订阅产品详细信息属性的问题
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>
我在正确发布、订阅和显示产品详情页面时遇到问题。我有一个 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>