树的ExtJS数据存储

时间:2009-11-06 19:33:36

标签: javascript extjs

我有一个基本的ExtJS问题,基于阅读文档和搜索,我似乎无法解决这个问题。目前我有一个TreePanel直接从URL加载JSON。我正在尝试将数据与视图分开,这样我也可以使用该数据输入OpenLayers地图(使用GeoExt)。如何将TreePanel指向Ext.data.Store而不是URL?

3 个答案:

答案 0 :(得分:12)

TreePanel使用TreeLoaders而不是Stores来加载数据。原因是树需要分层数据,而存储是平面表结构,不支持层次结构。基本数据对象也不同(Record vs. Node)。当然,您可以使用父/子键将您自己的分层数据存储在Store中,但此时Ext组件内置的内容并不存在。如果您尝试缓存树数据,则可能必须为此推出自己的解决方案。

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

答案 1 :(得分:1)

TreePanel配置中,只需指向您的数据网址。

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

如果您需要Store这个数据,那么bmoeskau可能会感到棘手,因为数据格式可能不同。

答案 2 :(得分:0)

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

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

编写一些函数来抽象解析(记录到节点),最后得到一种访问数据的通用方法。