我已在http://dojotoolkit.org/documentation/tutorials/1.10/store_driven_tree/demo/demo.html修改了dojo教程,以便从JsonRest商店中读取。
问题是当我点击“将新子项添加到所选项目”时,树显示不会更新,例如在根元素上,尽管更新在原始教程中有效。
我在“put”请求之后比较了dojo / store / Memory(来自原始教程)和dojo / store / JsonRest返回的内容: 内存返回新对象的id。 JsonRest以“return xhr(...)”结尾,因此它返回Deferred而不是新的id,Observable似乎无法理解。如果我改变dojo / store / JsonRest.js以结束:
,我可以使它工作 ...
return xhr(...).then(function(data){
return data.id;
};
}
我希望有一个解决方案而不修改dojo源?!
更多细节如下:
这是我的商店的定义,而不是原始的内存存储:
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源。
谢谢
星
答案 0 :(得分:0)
尝试使用Observable wrapper包装JsonRest商店,看看是否有助于树正确更新。还要确保树的模型正常运行,因为这是通过收听商店来更新树的时间和位置。
var memStore = new Memory({});
var store = new Observable(memStore); //Use this store for your tree
var cacheStore = new Cache(governmentStore,memStore);
这里的想法是,当你做PUT时,你应该放入cacheStore而不是政府商店。 Cache将在governmentStore上执行PUT,但在PUT完成时也会更新memStore,然后应该在Observable中触发通知并将该信息传递给树。
答案 1 :(得分:0)
使用jquery而不是dojo是解决方案。我发现我可以在几个小时内解决使用dojo时发生的所有问题。这主要是由于两个库的文档质量以及dojo似乎都有太多错误来对新错误报告做出反应。