我正在寻找使用dojo.store
和dijit.Tree
而不是REST的端到端示例。
现有许多示例使用较旧的dojo api dojo.data.api
,但缺少使用dojo.store
api的示例。
dijit.Tree
尚未完全支持dojo.store
的原因是什么?
如果是,我是否需要使用dojo.data.ObjectStore
包装来封装dojo.store
以便与dijit.tree
一起使用?
我看到了一个通过扩展StoreFileCache来解决这个问题的例子: http://dojo-toolkit.33424.n3.nabble.com/New-object-store-and-dijit-Tree-td2680201.html
这是推荐选项,还是应该
a)坚持dojo.data.api
直到dijit.Tree
直接支持dojo.store
,或
b)使用dojo.data.ObjectStore
包装器
由于
答案 0 :(得分:3)
现在DTK网站上有一个教程,似乎几乎涵盖了这个主题。
http://staging.dojotoolkit.org/documentation/tutorials/1.6/store_driven_tree/
然而,正如我所知,在没有给出答案的情况下链接到某些东西被认为是一种不好的做法,一般的想法是,而不是使用dojo.data.ObjectStore
来包裹它,然后可能通过{{1}推送它},您可以简单地扩充基于ForestStoreModel
的商店,以添加树将查找的方法。这是教程中的一个简单示例:
dojo.store
值得注意的是,在这种情况下,我们对数据的外观做了一些假设。您需要知道您的孩子如何关联并为此目的定制下面的方法,但希望如何为自己做到这一点相当清楚。
您现在也可以坚持usGov = new dojo.store.JsonRest({
target:"data/",
mayHaveChildren: function(object){
// see if it has a children property
return "children" in object;
},
getChildren: function(object, onComplete, onError){
// retrieve the full copy of the object
this.get(object.id).then(function(fullObject){
// copy to the original object so it has the children array as well.
object.children = fullObject.children;
// now that full object, we should have an array of children
onComplete(fullObject.children);
}, onError);
},
getRoot: function(onItem, onError){
// get the root object, we will do a get() and callback the result
this.get("root").then(onItem, onError);
},
getLabel: function(object){
// just get the name
return object.name;
}
});
API,但这种方法肯定会更轻巧。它需要从堆栈中取出几层,并且可以更轻松地自定义基于dojo.data
的商店。
答案 1 :(得分:3)
鉴于您概述的两个选项,我会说这是您对不同API的了解程度。
就个人而言,我会选择dojo.store并编写自己的TreeStoreModel来充分利用这两个世界。这种方法与Brian的建议非常相似。
如果您感兴趣,我已在how to use dijit.Tree with the ObjectStore wrapper和implementing a JsonRest backend in PHP上写了两篇系列文章。