我有一个基本的ExtJS问题,基于阅读文档和搜索,我似乎无法解决这个问题。目前我有一个TreePanel直接从URL加载JSON。我正在尝试将数据与视图分开,这样我也可以使用该数据输入OpenLayers地图(使用GeoExt)。如何将TreePanel指向Ext.data.Store而不是URL?
答案 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,是的,有两个调用,但结果返回正确的视图参数(树或数据视图)格式,结果是相同的,只是装饰不同。
理想的是有一个呼叫,中央数据,但这似乎可以接受。
编写一些函数来抽象解析(记录到节点),最后得到一种访问数据的通用方法。