Dojo动态填充组合框小部件

时间:2011-05-04 15:39:50

标签: dojo

有人可以向我解释为什么这个简单的直接代码无效,

var serviceStore = new dojo.data.ItemFileWriteStore({
data: {identifier: "serviceCode",items:[]}
}); 
//jsonObj is a json object that I obtain from the server via AJAX                                       
for(var i = 0; i<jsonObj.length;i++){
serviceStore.newItem({serviceCode: jsonObj[i]});
  }
var serviceFilterSelect = dojo.byId('serviceSelect');
serviceFilterSelect.store = serviceStore;

根本没有显示任何错误,但我的ID为“serviceSelect”的组合框没有显示任何选项,组合在我的代码的html部分声明,

<input dojoType = "dijit.form.ComboBox" id="serviceSelect"></input>

非常感谢任何指向正确方向的指示。

4 个答案:

答案 0 :(得分:4)

首先,您应该使用 dijit.byId 来获取dojo小部件而不是 dojo.byId 。 此外,jsonObj中的每个项目都应包含字段“name”。该字段将显示在组合框中。 E.g:

dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dijit.form.ComboBox");
var storeData = {
    identifier: 'serviceCode',
    items: []
}

var jsonObj = [{
    serviceCode: 'sc1',
    name: 'serviceCode1'
},
{
    serviceCode: 'sc2',
    name: 'serviceCode2'
}]
dojo.addOnLoad(function () {

var serviceStore = new dojo.data.ItemFileWriteStore({ data: storeData });

for (var i = 0; i < jsonObj.length; i++) {
    serviceStore.newItem(jsonObj[i]);
}
var serviceFilterSelect = dijit.byId('serviceSelect');
serviceFilterSelect.attr('store', serviceStore);
});

和HTML:

<select dojotype="dijit.form.ComboBox" id="serviceSelect" ></select>

似乎it works

答案 1 :(得分:1)

我无法从你发布的代码中看出来,但如果你在获取DOM节点时遇到问题,他们可能没有机会加载。

您可以尝试使用dojo.ready(function(){ ... });包装上面的内容。

答案 2 :(得分:0)

您是否已将商品放入商店?我不能从你发布的样本中说出来。

var serviceStore = new dojo.data.ItemFileWriteStore({
    data: {
        identifier: "serviceCode"
        ,items: [
            {serviceCode:'ec', name:'Ecuador'}
            ,{serviceCode:'eg', name:'Egypt'}
            ,{serviceCode:'sv', name:'El Salvador'}
        ]
    }
});

答案 3 :(得分:-1)

对于dojo&gt; = 1.6:

dojo.byId('serviceSelect').store=serviceStore;

对于dojo&lt; 1.6:

dojo.byId('serviceSelect').attr("store",serviceStore);