我正在尝试用一个简单的例子来研究Meteor,以填充两个下拉列表,其中一个是水果列表,另一个是根据所选水果的颜色:
collection(ProductList):
a = new Array();
a.push({color:"orange"});
a.push({color:"red"});
ProductList.insert({ product: "Orange", a });
a = new Array();
a.push({color:"green"});
a.push({color:"red"});
ProductList.insert({ product: "Apple", a });
a = new Array();
a.push({color:"green"});
a.push({color:"yellow"})
ProductList.insert({ product: "Banana", a });
html(下拉菜单):
<template name="prodlist">
<select id="category-select">
<option disabled="disabled" selected="selected">Please Select</option>
{{#each prodlist}}
<option value="{{this}}">{{this}}</option>
{{/each}}
</select>
</template>
js:
Template.prodlist.events({
"change #category-select": function (event, template) {
var category_prod = $(event.currentTarget).val();
//this return the correct element selected in the dropdown(i.e Orange Apple Banana)
console.log("category : " + category_prod);
var productID = ProductList.findOne({product: category_prod })._id
console.log("current ID: " + productID);
}
});
请参阅上面的******我的第一个问题 这已由chrisklaussner解决。代码已更新。
此外,我正在尝试将找到的._id (saved to productID)
提供给第二个下拉列表:
html:
<template name="colorlist">
<select id="category-select">
<option disabled="disabled" selected="selected">colors</option>
{{#each colorlist}}
<option value="{{this}}">{{this}}</option>
{{/each}}
</select>
</template>
js:
Template.colorlist.helpers({
colorlist: function () {
const ans = productID.get();
const product = ProductList.findOne({ _id: ans});
if (product) {
return product.a.map(function (doc) {
return doc.color;
});
}
}
});
请参阅上面的*****以了解我的第二个问题 这已经解决了。
编辑:此问题已得到解决且原始帖子包含正确答案
答案 0 :(得分:1)
findOne
来电时出错。第一个参数(传递{}
的位置)是指定要获取内容的选择器。第二个是选项。
例如,ProductList.findOne({ product: category_prod })._id
应该为您提供正确的产品ID。在您的情况下,选择器{}
匹配集合中的所有产品,findOne
返回第一个产品。这就是为什么你总是得到相同的ID。