dijit.form.filteringselect динамически изменять параметры - PullRequest
4 голосов
/ 18 апреля 2011

У меня есть компонент dijit.form.FilteringSelect, и я хочу динамически изменять параметры. Но я получаю хранилище из dijit.form.FilteringSelect с его свойством store; в магазине нет функции сеттера. (Это может быть dojo.store.Reader)

Так как я могу изменить параметр dijit.form.FilteringSelect? Должен ли я изменить это напрямую с DOM? Есть ли способ обновить магазин за dijit.form.FilteringSelect?

Ответы [ 3 ]

8 голосов
/ 19 апреля 2011

В додзё есть два типа хранилищ данных:

  1. dojo.data.ItemFileReadStore - хранилище данных только для чтения
  2. dojo.data.ItemFileWriteStore - расширение ItemFileReadStore, которое добавляет dojo.data.api.Write

    В вашем случае вам следует использовать ItemFileWriteStore - он предоставляет функции для изменения данных в хранилище.

например:.

У вас есть массив стран, и вы хотите использовать его для фильтрации, выберите:

[{
   abbr: 'ec',
   name: 'Ecuador',
   capital: 'Quito'
},
{
   abbr: 'eg',
   name: 'Egypt',
   capital: 'Cairo'
},
{
   abbr: 'et',
   name: 'Ethiopia',
   capital: 'Addis Ababa'
}]

Прежде всего вам потребуется создать js-переменную хранилища данных для ItemFileWriteStore.

<script>
   dojo.require("dojo.data.ItemFileWriteStore");
   dojo.require("dijit.form.FilteringSelect");

   var storeData = {
       identifier: 'abbr',
       label: 'name',
       items: //YOUR COUTRIES ARRAY
       }
</script>

Следующий шаг - объявить фильтрацию select и itemFileWriteStore в html-разметке:

<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») должно быть уникальным в магазине

Удалить элементы - например, удаление всех элементов с именем "Соединенные Штаты Америки"

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». Функция gotNames удаляет все элементы, возвращаемые запросом.

И последняя функция - Изменить элемент

похоже на функцию удаления. только одно отличие:

Вы должны использовать setValue() метод itemFileWriteStore для изменения свойства элемента:

countryStore.setValue(item, "name", newValue); 

Здесь - страница с рабочим примером

3 голосов
/ 21 декабря 2011

Я решил ту же проблему с этими предложениями, надеюсь, это кому-нибудь поможет.

Для Версия Dojo <1.7 </strong>

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 или другую консоль отладки.

0 голосов
/ 01 декабря 2014

свойства '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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...