2014-12-03 79 views
0

enter image description here Im設置Dojo選擇下拉列表的默認值,即id = -999從json對象。 這工作正常,但在擴展默認值更改爲第二個位置時,選擇框單擊時,id = 29被設置爲默認(第一個位置)。 此問題主要發生在Chrome瀏覽器中。 附加的是json對象和UI行爲的圖像。Dojo選擇下拉擴展更改默認值

在此先感謝。 enter image description here

enter image description here

enter image description here

+0

我認爲你必須分享一些代碼才能獲得更多幫助。你在這個例子中看到了相同的行爲嗎? http://jsfiddle.net/froden/oqjym25f/ – Frode 2014-12-03 14:29:25

回答

1

您需要添加labelAttr設置store時,例如

new Select({ 
    store: new MemoryStore({ data: g_data(), getLabel: function(o) {return o.label;} }), 
    labelAttr: "label", 
    value: "-999", 
    onChange: function(v) { document.getElementById("output").innerHTML = "Selected " + v; } 
}).placeAt("container").startup(); 

在這裏看到:http://jsfiddle.net/k63h12ux/2/

如果您不希望標籤進行排序,添加sortByLabel: false。這也將解決這個問題。

new Select({ 
    store: new MemoryStore({ data: g_data(), getLabel: function(o) {return o.label;} }), 
    sortByLabel: false, 
    value: "-999", 
    onChange: function(v) { document.getElementById("output").innerHTML = "Selected " + v; } 
}).placeAt("container").startup(); 

在這裏看到:http://jsfiddle.net/z4w0bx9k/1/

這個問題的原因是周圍的dijit.form._FormSelectWidgetfollowing line。如果沒有提供labelAttr且默認值sortByLabel設置爲true,則來自商店的物品將使用錯誤的條件進行存儲,因此會給出錯誤的順序。

var labelAttr = this.labelAttr; 
items.sort(function(a, b){ 
    return a[labelAttr] > b[labelAttr] ? 1 : b[labelAttr] > a[labelAttr] ? -1 : 0; 
}); 

dijit.form._FormSelectWidget文檔,它也說:

如果store設置,labelAttr必須設置也一樣,除非店是一個老風格 dojo.data存儲,而不是一個新的道場/商店。

+0

感謝您的答案,其實labelAttr:「標籤」, 值:「-999」,sortByLabel:false,這三行代碼修復了我的問題。 – user1516871 2014-12-09 05:10:27