寻找带有dijit.Tree over REST的dojo.store的例子

时间:2011-07-11 17:52:35

标签: rest dojo

我正在寻找使用dojo.storedijit.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包装器

由于

2 个答案:

答案 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更轻量级,也许更容易理解,但是包装器增加了一些开销。如果您认为您的项目将存在很长时间,这可能是最佳方式。
  • dojo.data是一个遗留API,最终将逐步淘汰。如果您的项目是短暂的,并且仅基于dijit.Tree,那么这可能是您现在最好的选择。

就个人而言,我会选择dojo.store并编写自己的TreeStoreModel来充分利用这两个世界。这种方法与Brian的建议非常相似。

如果您感兴趣,我已在how to use dijit.Tree with the ObjectStore wrapperimplementing a JsonRest backend in PHP上写了两篇系列文章。