首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从TreeStore Extjs4.1获取数据

如何从TreeStore Extjs4.1获取数据
EN

Stack Overflow用户
提问于 2013-04-15 18:47:18
回答 2查看 8.2K关注 0票数 2

Ext JS 4.1

要从“Ext.data.Store”获取值数据,只需使用

代码语言:javascript
复制
var data1 = store.data.items[0].data.fieldname;

代码语言:javascript
复制
var data1 = store.getAt(0).data.fieldname;

但是,在'Ext.data.TreeStore‘中,这个方法是无效的!

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-03 11:56:45

这实际上是一个非常需要的功能。

假设您有一个带有检查列的树形网格,您正在侦听该列的"checkchange“事件,并希望找到刚刚更改的记录。

不幸的是,ExtJS为您提供的只是一个记录索引。幸运的是,没有人阻止我们在自己的存储中定义我们自己的getAt方法,这正是我们想要的:

代码语言:javascript
复制
{
  store: 'tree',
  getAt: function (index) {
    var current = 0;
    return (function find(nodes) {
      var i, len = nodes.length;
      for (i = 0; i < len; i++) {
        if (current === index) {
          return nodes[i];
        }
        current++;
        var found = find(nodes[i].childNodes);
        if (found) {
          return found;
        }
      }
    }(this.tree.root.childNodes));
  }
}
票数 0
EN

Stack Overflow用户

发布于 2013-04-17 05:24:21

这是Extjs的一个常见误解。Ext.data.TreeStore和Ext.data.Store实际上并不是很相似,都不是从对方继承而来的。

存储以模型数组的格式保存数据:

代码语言:javascript
复制
[
    {
        attribute1,
        attribute2,
        ...
    },
    ...
]

而树存储以节点树结构的格式保存数据,如下所示:

代码语言:javascript
复制
{
    attribute1,
    attribute2,
    ...,
    children: [
        {
            attribute1,
            attribute2,
            ...,
            children: [
                ...
            ]
        }
    ]
}

由于常规存储和树存储的底层结构完全不同,因此它们的功能也完全不同。我猜在上面的例子中,store和node函数的正确用法应该是:

代码语言:javascript
复制
var data1 = treestore.getRootNode().getChildAt(0).get(fieldname);

getRootNode()获取树的根节点,它由类NodeInterface表示,该类具有getChildAt(index)方法,用于检索根节点的第一个子节点。然后,我使用get(dataIndex)函数从节点获取所需的属性。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16013279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档