Meteor:从下拉列表中返回选定值的._id并将其反馈到另一个下拉列表

时间:2016-04-13 21:43:58

标签: meteor

我正在尝试用一个简单的例子来研究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;
            });
        }        
    }
});

请参阅上面的*****以了解我的第二个问题 这已经解决了。

编辑:此问题已得到解决且原始帖子包含正确答案

1 个答案:

答案 0 :(得分:1)

findOne来电时出错。第一个参数(传递{}的位置)是指定要获取内容的选择器。第二个是选项。

例如,ProductList.findOne({ product: category_prod })._id应该为您提供正确的产品ID。在您的情况下,选择器{}匹配集合中的所有产品,findOne返回第一个产品。这就是为什么你总是得到相同的ID。