如何更新ExtJS4 TreeStore中的模型实例数据

时间:2014-04-23 18:14:08

标签: extjs tree

我是ExtJS的新手,我使用TreePanel和TreeStore,而TreeStore又使用了我已定义的模型。该模型非常简单,只包含两个字段:" name" (字符串)和"值" (整数)。我的TreePanel有两列:一个树列(显示"名称"我的模型的字段)和一个gridcolumn(显示"值"我的模型的字段)。

我的TreeStore通过Ajax调用自动加载JSON。我的JSON测试数据如下所示:

{
    "name": "Root",
    "children": [
        {
            "name": "apple",
            "value": 1
        },
        {
            "name": "banana",
            "value": 2
        },
        {
            "name": "coconut",
            "value": 3
        }
    ]
}

我的理解是,通过指定一个与TreeStore一起使用的模型,它会导致每个模型实例都添加了NodeInterface属性/方法,以便它可以使用树结构。

在我的控制器中,我为TreePanel添加了一个事件处理程序,当我的用户点击TreePanel中的某个节点时,该事件处理程序会触发。该功能如下所示:

onTreePanelItemClick: function(view, record, item, index, e) {
    console.log("Node name: " + record.data.name);
    console.log("Node value: " + record.data.value);
}

到目前为止,一切正常,当我点击" apple"树中的节点,我在控制台中看到了预期的输出:

Node name: apple
Node value: 1

让我们说,只要我的用户点击树中的某个节点,我就想更新"值"该节点的字段(或者更确切地说,可能更正确地说,是商店中基础模型实例上的"值"字段),以便它包含"值"为了实现这一点,我尝试在我的onTreePanelItemClick()函数中执行以下操作:

var selectedNode = myTreePanel.GetSelectionModel().getSelection();
selectedNode.data.value = 100;

现在,我第一次点击我的" apple"节点,我在控制台中看到以下内容:

Node name: apple
Node value: 1

我第二次点击" apple"节点(在我的onTreePanelItemClick()将值更新为100之后),我在控制台中看到了这一点:

Node name: apple
Node value: 100

尽管有控制台输出,但"值"在我的TreePanel的网格列中显示的字段仍显示1(而不是100)。我怀疑我实际上没有正确更新我的树库中节点的模型实例。但我不确定如何我应该更新现有节点/模型的字段。我在TreeStore中看到的所有示例似乎都涉及添加和删除节点,但这不是我想要做的。谢谢你的建议!

1 个答案:

答案 0 :(得分:2)

永远不要通过其(私有)数据属性访问记录数据。调用record.get(),record.set()或record.getData()。

在你的情况下,你会调用record.set({value:100});