dijit/ Дерево не обновляется при подключении к додзё / магазину /JsonRest

Я изменил учебник по dojo по адресу 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({}));

(Если я удаляю Cache и использую JsonRest напрямую, даже измененный JsonRest.js не обновляет Tree).

Это ответ от запроса PUT на сервер json:

{"name":"New Child", "id":0.7243958345}

Пожалуйста, помогите разрешить dijit/Tree реагировать на изменения основного хранилища JsonRest, не возиться с источниками dojo.

Спасибо

Dominic

2 ответа

Решение

Решением было использование jquery вместо dojo. Я обнаружил, что могу за несколько часов изучения jquery решить все проблемы, возникающие при использовании dojo. Это происходит главным образом из-за качества документации обеих библиотек, а также из-за того, что в dojo слишком много ошибок, чтобы реагировать на новые сообщения об ошибках.

Попробуйте обернуть свой магазин JsonRest оболочкой Observable и посмотреть, поможет ли это корректно обновить дерево. Также убедитесь, что модель дерева функционирует должным образом, так как именно это и должно обрабатываться, когда и где дерево обновляется при прослушивании магазина.

var memStore = new Memory({});
var store = new Observable(memStore); //Use this store for your tree
var cacheStore = new Cache(governmentStore,memStore);

Идея в том, что когда вы делаете PUT, вы должны помещать в cacheStore, а не в GovernmentStore. Кэш выполнит PUT в магазине GovernmentStore, но также обновит memStore, когда PUT будет завершен, что должно вызвать уведомление в Observable и передать эту информацию в дерево.

Другие вопросы по тегам