【问题标题】:How to get data from TreeStore Extjs4.1如何从 TreeStore Extjs4.1 获取数据
【发布时间】:2013-04-15 10:47:17
【问题描述】:

Ext JS 4.1

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

var data1 = store.data.items[0].data.fieldname;

var data1 = store.getAt(0).data.fieldname;

但是,在'Ext.data.TreeStore'中,这个方法是行不通的!

有什么建议吗?

【问题讨论】:

    标签: tree extjs4.1


    【解决方案1】:

    这是对 Extjs 的常见误解。 Ext.data.TreeStore 和 Ext.data.Store 实际上不是很相似,也没有继承自另一个。

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

    [
        {
            attribute1,
            attribute2,
            ...
        },
        ...
    ]
    

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

    {
        attribute1,
        attribute2,
        ...,
        children: [
            {
                attribute1,
                attribute2,
                ...,
                children: [
                    ...
                ]
            }
        ]
    }
    

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

    var data1 = treestore.getRootNode().getChildAt(0).get(fieldname);
    

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

    【讨论】:

      【解决方案2】:

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

      考虑这样一种情况,当您有一个带有检查列的树形网格时,您正在侦听该列的“checkchange”事件并想要查找刚刚更改的记录。

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

      {
        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));
        }
      }
      

      【讨论】:

      • 在 ExtJS 4.2.x 中,通过 checkchange 事件传递的节点索引不计算折叠节点的子节点。所以使用上面的代码我会得到错误的模型记录。我只是在 "current++;" 之后添加了 "if (nodes[i].isExpanded()) {" ...它似乎工作正常。虽然它似乎有效,但我可能不会坚持使用这段代码,因为它看起来有点脆弱。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 2021-02-10
      • 2018-12-25
      • 2023-03-26
      • 2018-02-22
      • 2019-09-29
      • 1970-01-01
      相关资源
      最近更新 更多