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'中,这种方法不起作用!
有什么建议吗?
答案 0 :(得分:8)
这是与Extjs的常见误解。 Ext.data.TreeStore和Ext.data.Store实际上不是很相似,也不会从另一个继承。
商店以模型数组的格式保存数据:
[
{
attribute1,
attribute2,
...
},
...
]
而treestore以节点树结构的格式保存数据,如下所示:
{
attribute1,
attribute2,
...,
children: [
{
attribute1,
attribute2,
...,
children: [
...
]
}
]
}
由于常规存储和树库底层的这些完全不同的结构,它们上的功能完全不同。我猜你在上面的例子中,正确使用存储和节点函数将是:
var data1 = treestore.getRootNode().getChildAt(0).get(fieldname);
getRootNode()
获取树的根节点,该节点由类NodeInterface
表示,该类具有检索根节点的第一个子节点的方法getChildAt(index)
。然后我使用get(dataIndex)
函数从节点获取所需的属性。
答案 1 :(得分:-1)
这实际上是一项非常需要的功能。
考虑一下当你有一个带有检查列的树网格的情况时,你正在收听该列的“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));
}
}