dijit/Tree 连接到 dojo/store/JsonRest 时未更新
dijit/Tree is not updated when connected to a dojo/store/JsonRest
我已经修改了 http://dojotoolkit.org/documentation/tutorials/1.10/store_driven_tree/demo/demo.html 的 dojo 教程以从 JsonRest 商店读取。
问题是当我点击 "Add new child to selected item" 时树显示没有更新,例如在根元素上,尽管更新在原始教程中有效。
我比较了 dojo/store/Memory(来自原始教程)和 dojo/store/JsonRest return 在 "put" 请求之后:
Memory returns 新对象的id。
JsonRest 以 "return xhr(...)" 结尾,所以它 return 是一个 Deferred 而不是新的 id,这似乎不是 Observable 无法理解的。如果我将 dojo/store/JsonRest.js 更改为以以下结尾:
,我可以让它工作
...
return xhr(...).then(function(data){
return data.id;
};
}
希望有不修改dojo源的解决方案?!
更多详细信息如下:
这是我的store的定义,而不是原来的Memory store:
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)
这是对 json 服务器的 PUT 请求的回复:
{"name":"New Child", "id":0.7243958345}
请帮助允许 dijit/Tree 对基础 JsonRest 存储的更改做出反应,而不会弄乱 dojo 源。
谢谢
多米尼克
尝试用 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 而不是 governmentStore。 Cache 将在 governmentStore 上执行 PUT,但也会在 PUT 完成时更新 memStore,然后应触发 Observable 中的通知并将该信息传递给树。
使用 jquery 而不是 dojo 是解决方案。我发现我可以在几个小时的学习中解决 jquery 使用 dojo 时出现的所有问题。这主要是由于这两个库的文档质量,也因为 dojo 似乎有太多的错误,无法对新的错误报告做出反应。
我已经修改了 http://dojotoolkit.org/documentation/tutorials/1.10/store_driven_tree/demo/demo.html 的 dojo 教程以从 JsonRest 商店读取。
问题是当我点击 "Add new child to selected item" 时树显示没有更新,例如在根元素上,尽管更新在原始教程中有效。
我比较了 dojo/store/Memory(来自原始教程)和 dojo/store/JsonRest return 在 "put" 请求之后: Memory returns 新对象的id。 JsonRest 以 "return xhr(...)" 结尾,所以它 return 是一个 Deferred 而不是新的 id,这似乎不是 Observable 无法理解的。如果我将 dojo/store/JsonRest.js 更改为以以下结尾:
,我可以让它工作 ...
return xhr(...).then(function(data){
return data.id;
};
}
希望有不修改dojo源的解决方案?!
更多详细信息如下:
这是我的store的定义,而不是原来的Memory store:
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)
这是对 json 服务器的 PUT 请求的回复:
{"name":"New Child", "id":0.7243958345}
请帮助允许 dijit/Tree 对基础 JsonRest 存储的更改做出反应,而不会弄乱 dojo 源。
谢谢
多米尼克
尝试用 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 而不是 governmentStore。 Cache 将在 governmentStore 上执行 PUT,但也会在 PUT 完成时更新 memStore,然后应触发 Observable 中的通知并将该信息传递给树。
使用 jquery 而不是 dojo 是解决方案。我发现我可以在几个小时的学习中解决 jquery 使用 dojo 时出现的所有问题。这主要是由于这两个库的文档质量,也因为 dojo 似乎有太多的错误,无法对新的错误报告做出反应。