Dojo:dijit.form.filteringselect从Json动态添加选项

时间:2013-07-10 08:35:09

标签: javascript dojo

我从json文件获取数据,现在我想将它添加到filteringselect。我尝试下面的代码,但它没有添加,请帮助我

 HTML code==
        <select data-dojo-type="dijit/form/FilteringSelect"
                id="education"></select>

        Javascrip code==
            request.get("/json/education.json", {
                            handleAs: "json"
                        }).then(function(data) {

                            var node = dijit.byId('education');
                            dojo.forEach(data.items, function(desc, index){     
                                node.addOption({
                                     label: desc.name,
                                     value: desc.value 
                                     });
                            });

                        },
                        function(error){});


    Json code

    {
        "title":"Education",
        "items":[
    {"name":"Select Education","value":"0"},
    {"name":"B.A", "value":"1"},
    {"name":"B.Sc" ,"value":"2"},
    ...........................

2 个答案:

答案 0 :(得分:2)

可以根据ajax调用动态设置FilteringSelect的存储。

var str = new dojo.store.Memory(optionData);
dijit.byId('widgetId').set('store',str);

但是,你的json数据必须是这样的: -

var optionData={
                data:[
                   {id:'aaaaaa',name:'aaaaaa'},
                   {id:'bbbbbb',name:'bbbbbb'}
                  ]
               };

以上示例实际上将替换商店。如果,来自ajax调用的新数据需要附加到现有选项,那么

 //str is the existing store of FilteringSelect field above
 dojo.forEach(result.data, function(optionSet, index){     
                str.add(optionSet);
 });

请注意: 'addOption'仅适用于Select。不适用于FilteringSelect。

答案 1 :(得分:0)

我希望这会有所帮助:

dijit.byId("select_id").store.root.add(dojo.create("option",{ value: "some", innerHTML: "label of option"}));

要删除现有元素,请执行以下操作:

var size = dijit.byId("select_id").store.root.removeChild.length;    
for(var i=size; i>=0; i--){   dijit.byId("select_id").store.root.removeChild(dijit.byId("select_id").store.root.children[size-1]);
}