Dojo dynamically populate widget sockets

Can someone explain to me why this simple direct code doesn’t work,

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; 

The error does not appear at all, but my combobox with the identifier "serviceSelect" does not display any parameters, the combo is declared in the html section of my code,

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

Any pointers in the right direction would be highly appreciated.

+4
source share
4 answers

First of all, you should use dijit.byId to get the dojo widget instead of dojo.byId . Also, each element in jsonObj must contain a name field. This field will be displayed in combobox. For instance:

 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); }); 

And HTML:

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

It seems to work .

+4
source

I can’t tell from the code that you posted, but if you have problems getting the DOM nodes, they may not be able to load.

You can try to wrap what you had above with dojo.ready(function(){ ... }); .

+1
source

Do you put items in your store? I can’t say from the sample you posted.

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

For dojo> = 1.6:

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

For dojo <1.6:

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

All Articles