Обработка уведомлений

В завершение этого раздела и всей главы мы коротко рассмотрим реализацию интерфейса Notification в механизме ItemFileWriteStore, потому что он очень удобен в случаях, когда необходимо реализовать обработку различных уведомлений onNew, onDelete или onSet, связанных с созданием новых элементов, удалением существующих элементов или изменением элементов, соответственно.

Поскольку к настоящему времени вы уже наверняка способны, прочитав, понять, как используются интерфейсы в различных реализациях, пример, который добавляет, изменяет и удаляет элемент из набора данных, наверняка покажется вам очевидным. Но на всякий случай замечу, что пример 9.16 является дополненной версией примера 9.13.

Пример 9.16. Использование интерфейса Notification для перехвата событий средствами ItemFileWriteStore
/* Начало блока обработчиков извещений */
coffeeStore.onNew = function(item, parentItem) {
var itemName = coffeeStore.getValue(item, "name");
console.log("Just added", itemName, "which had parent", parentItem);
}
coffeeStore.onSet = function(item, attr, oldValue, newValue) {
var itemName = coffeeStore.getValue(item, "name");
console.log("Just modified the ", attr, "attribute for", itemName);
/* Поскольку атрибут children может содержать сразу несколько значений,
oldValue и newValue являются массивами, которые можно обойти
и выполнить какиелибо действия, хотя чаще всего достаточно будет
просто отправить newValue на сервер, чтобы зафиксировать изменения */
}
coffeeStore.onDelete = function(item) {
// coffeeStore.isItem(item) вернет false, поэтому не пытайтесь
// обращаться к элементу
console.log("Just deleted", item);
}
/* Конец блока обработчиков извещений */
/* Программный код, использующий обработчики извещение */
//Добавление элемента верхнего уровня вызывает появление извещения
var newItem = coffeeStore.newItem({
name : "Really Dark",
description : "Left brewing in the pot all day...extra octane."
});
var darkRoasts ;
coffeeStore.fetchItemByIdentity({
identity : "Dark Roasts",
onItem : function(item, request) {
darkRoasts = item;
}
});
var darkRoastChildren = coffeeStore.getValues(darkRoasts, "children");
//Изменение элемента вызывает появление извещения
coffeeStore.setValues(darkRoasts,
"children",darkRoastChildren.concat(newItem))
);
//Удаление элемента вызывает сразу два извещения
coffeeStore.deleteItem(newItem)

В результате запуска этого примера вы должны увидеть вывод, как показано ниже:
Just added Really Dark, which had parent null
Just modified the children attribute for Dark Roasts
Just modified the children attribute for Dark Roasts
Just deleted Object _0=13 name=[1] _RI=true description=[1]

Другими словами, вы получаете ожидаемое уведомление, когда создаете элемент верхнего уровня; когда изменяете значение атрибута children другого элемента, добавляя вновь созданный элемент в коллекцию дочерних элементов родителя; еще одно уведомление получаете при удалении ссылки на дочерний элемент из коллекции и последнее уведомление – когда удаляется сам элемент..



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Dojo на эту тему:
ItemFileReadStore
ItemFileWriteStore
Анализ ItemFileReadStore
Запрос дочерних элементов
Иерархии и ссылки в формате JSON

Вернуться в раздел: Dojo / Абстракция данных