[英]dijit.form.filteringselect dynamically change options
我有一個dijit.form.FilteringSelect
組件,我想動態更改選項。 但我從dijit.form.FilteringSelect獲取商店的商店屬性; 商店里沒有setter功能。 (它可能是一個dojo.store.Reader)
那么如何更改dijit.form.FilteringSelect
的選項呢? 我應該直接用DOM更改嗎? 有沒有辦法更新dijit.form.FilteringSelect
后面的商店?
dojo中有兩種類型的數據存儲:
dojo.data.ItemFileWriteStore - 在dojo.data.api.Write上添加的ItemFileReadStore的擴展名
在您的情況下,您應該使用ItemFileWriteStore - 它提供了修改存儲中數據的功能。
例如:
您有多個國家/地區,並且您希望在過濾選擇中使用它:
[{
abbr: 'ec',
name: 'Ecuador',
capital: 'Quito'
},
{
abbr: 'eg',
name: 'Egypt',
capital: 'Cairo'
},
{
abbr: 'et',
name: 'Ethiopia',
capital: 'Addis Ababa'
}]
首先,您需要為ItemFileWriteStore創建數據存儲js-variable。
<script>
dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dijit.form.FilteringSelect");
var storeData = {
identifier: 'abbr',
label: 'name',
items: //YOUR COUTRIES ARRAY
}
</script>
下一步 - 在html標記中聲明過濾select和itemFileWriteStore:
<div dojotype="dojo.data.ItemFileWriteStore" data="storeData" jsid="countryStore"></div>
<div dojotype="dijit.form.FilteringSelect" store="countryStore" searchattr="name" id="filtSelect"></div>
最后在過濾選擇中創建添加/刪除/修改項目的特殊功能:
添加新項目:
function addItem() {
var usa = countryStore.newItem({ abbr: 'us', name: 'United States', capital: 'Washington DC' });
}
我希望這一切都清楚。 只有小注:“標識符”字段(在我們的例子中為“abbr”)在商店中必須是唯一的
刪除項目 - 例如刪除所有名稱為“United States of America”的項目
function removeItem() {
var gotNames = function (items, request) {
for (var i = 0; i < items.length; i++) {
countryStore.deleteItem(items[i]);
}
}
countryStore.fetch({ query: { name: "United States of America" }, queryOptions: { ignoreCase: true }, onComplete: gotNames });
}
如您所見,我創建了查詢,在數據存儲中查找名稱==“美國”的項目。 執行查詢后,將調用函數“gotNames”。 function gotNames刪除查詢返回的所有項。
最后一個功能 - 編輯項目
它類似於刪除功能。 只有一個區別:
你應該使用itemFileWriteStore的setValue()
方法來改變item屬性:
countryStore.setValue(item, "name", newValue);
我用這句話解決了同樣的問題,希望對某人有所幫助。
對於Dojo版本<1.7
dijit.byId('myId').store.root[{index of select}].innerText='New text';
dijit.byId('myId').store.root[{index of select}].value='New Value';
對於Dojo版本> = 1.7
dijit.byId('myId').store.data[{index of select}].name='New Text';
dijit.byId('myId').store.data[{index of select}].value='New Value';
更改顯示的文本(當前選中)
dijit.byId('myId').textbox.value='New text';
您可以使用Firebug或其他調試控制台查看此屬性。
屬性'urlPreventCache:true,clearOnClose:true'將強制重新加載存儲
<div data-dojo-type="eco/dojo/data/ItemFileReadStore" data-dojo-props='url:"../json/GetClients", urlPreventCache:true, clearOnClose:true' data-dojo-id="clientStore" ></div>
<div id=proposalClient data-dojo-type="dijit/form/FilteringSelect" data-dojo-props="store:clientStore, searchAttr:'clientName', required:'true', pageSize:'15'" ></div>
然后,在事件/回調/處理程序中,您需要/想要重置值只需執行此操作
function func-name() {
clientStore.url = "../json/GetClients?param=<your-new-search-conditions>";
clientStore.close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.