Я изменил руководство по додзё по адресу http://dojotoolkit.org/documentation/tutorials/1.10/store_driven_tree/demo/demo.html для чтения из хранилища JsonRest.
Проблема в том, что отображение дерева не обновляется, когда я нажимаю «Добавить новый дочерний элемент к выбранному элементу», например. на корневом элементе, хотя обновление работало в исходном руководстве.
Я сравнил, что возвращают dojo/store/Memory (из исходного руководства) и dojo/store/JsonRest после запроса «put»: Memory возвращает идентификатор нового объекта. JsonRest заканчивается «return xhr(...)», поэтому он возвращает Deferred вместо нового идентификатора, который, похоже, не понимается Observable. Я могу заставить это работать, если я изменю dojo/store/JsonRest.js на конец:
...
return xhr(...).then(function(data){
return data.id;
};
}
Надеюсь есть решение без модификации исходников додзё?!
Далее следуют некоторые подробности:
Это определение моего хранилища вместо исходного хранилища памяти:
var governmentStore = new JsonRest({
target : "http://localhost:8080/test/gov",
getChildren : function(object) {
return this.query({
parent : object.id
});
}
});
var governmentStore = new Cache(governmentStore,new Memory({}));
(Если я удаляю кэш и использую JsonRest напрямую, даже модифицированный JsonRest.js не обновляет дерево).
Это ответ на запрос PUT на сервер json:
{"name":"New Child", "id":0.7243958345}
Пожалуйста, помогите разрешить dijit/Tree реагировать на изменения базового хранилища JsonRest, не возясь с исходными кодами dojo.
Спасибо
Доминик