В додзё есть два типа хранилищ данных:
- dojo.data.ItemFileReadStore - хранилище данных только для чтения
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);
Здесь - страница с рабочим примером