簡體   English   中英

dijit.form.filteringselect動態更改選項

[英]dijit.form.filteringselect dynamically change options

我有一個dijit.form.FilteringSelect組件,我想動態更改選項。 但我從dijit.form.FilteringSelect獲取商店的商店屬性; 商店里沒有setter功能。 (它可能是一個dojo.store.Reader)

那么如何更改dijit.form.FilteringSelect的選項呢? 我應該直接用DOM更改嗎? 有沒有辦法更新dijit.form.FilteringSelect后面的商店?

dojo中有兩種類型的數據存儲:

  1. dojo.data.ItemFileReadStore - 只讀數據存儲區
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM