2009-11-06 75 views
3

我有一个基本的ExtJS问题,根据阅读文档和搜索,我似乎无法解决这个问题。目前我有一个TreePanel直接从URL加载JSON。我试图从视图中分离数据,以便我还可以使用该数据将数据提供给OpenLayers地图(使用GeoExt)。如何将TreePanel指向Ext.data.Store而不是URL?树的ExtJS数据存储

+2

看起来情况在ExtJS 3.1中随着TreeGrid组件的增加而改变:http://www.extjs.com/blog/2009/12/17/ext-js-3-1-massive-memory-改进 - treegrid-and-more%E2%80%A6/ – 2010-01-22 01:52:11

+0

警告:这个问题和答案是过时的(4岁)。我希望SO有办法归档这些... – HDave 2013-11-07 14:06:32

回答

11

TreePanels使用TreeLoaders而不是Stores来加载数据。原因是树需要分层数据,而存储是平坦的表结构,不支持层次结构。基本数据对象也不同(记录与节点)。当然,您可以使用父/子密钥将自己的分层数据存储在商店中,但此时没有内置Ext组件的任何内容。如果您尝试缓存树数据,则可能需要为此推出自己的解决方案。

编辑:现在Ext 4出来了,这个答案只适用于Ext 3。Ext 4现在有一个(大部分)统一的数据模型,并且树使用TreeStore(具有应用于模型的附加NodeInterface),不再有一个单独的TreeLoader类。

+5

感谢您回来并添加“post ExtJS 4”更新! – 2011-09-20 20:41:19

1

在您的TreePanel配置中,只需指向您的数据url即可。

loader: new Ext.tree.TreeLoader({ 
    url: '/path/to/data.json', 
    requestMethod: 'GET', 
    preloadChildren: true 
    }) 

如果你需要一个Store这个数据,它可以通过bmoeskau指出,由于数据格式可能不同,很麻烦。

0

在我们的应用程序中,我们使用了一个树面板和一个dataview的组合,两者都对数据(使用传统树加载器的树)和使用存储的数据视图发出请求。两者都提交到相同的URL,是的,有两个调用,但结果返回适当的格式化视图参数(树或数据视图)和结果相同,只是装饰不同。

这将是一个理想的呼叫,中央数据,但这似乎工作可接受。

编写几个函数来抽象解析(记录到节点),并最终获得访问数据的一般方法。

+1

这绝对是很多人的痛点。 Ext 4.0路线图包含“关系型”商店,所以我们希望最终解决这个问题。 http://www.extjs.com/products/js/roadmap.php – 2010-04-09 08:35:35