2011-05-04 62 views
4

可能有人請向我解釋爲什麼這個簡單直接的代碼心不是工作,道場填充組合框控件動態

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

,首先你應該使用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

+0

您好,感謝您的快速回復,我似乎有與道場的幾個問題。這個文檔實際上並不那麼一致,例如當我使用dijit.byId時,我得到的錯誤是組件正在查找的是空的,當我使用dojo.byId時,我得到了組件,但現在錯誤更改爲「TypeError:serviceFilterSelect .attr不是一個函數「,我認爲這意味着attr函數/屬性不存在?它是否被棄用或什麼? – 2011-05-04 21:42:20

+0

serviceFilterSelect.attr - 它不是不推薦使用的函數。 「TypeError:serviceFilterSelect.attr不是函數」 - 由於使用了dojo.byId而發生此錯誤。 dojo.byId返回DOM節點,當然,DOM節點沒有這個功能。您應該使用dijit.byId - 它返回一個JavaScript對象,它是該窗口小部件的實例,並具有「.attr」函數。 – Andrei 2011-05-05 08:32:27

+0

你應該檢查下面的事情:1.路徑:是否所有的資源都有正確的URL並且實際加載?嘗試從谷歌代碼加載dojo:。 2. parseOnLoad:默認情況下,解析器沒有加載並且不運行,所以如果你的聲明性小部件不會被實例化,除非你已經將dojo.config.parseOnLoad設置爲true。 – Andrei 2011-05-05 08:33:52

0

您是否已將商品放入商店?我無法從您發佈的樣本中分辨出來。

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

是的,商店由Ajax調用的json數據填充,看起來問題在於dojo解析器配置。 – 2011-05-05 14:16:17

1

我無法從您發佈的代碼中得知,但是如果您在獲取DOM節點時遇到問題,則可能無法加載。

你可以嘗試使用dojo.ready(function(){ ... });來包裝上面的內容。

-1

對於道場> = 1.6:

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

對於道場< 1.6:

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