3

我有以下情况。我有一个与我的服务器同步的 TreeStore。服务器响应返回带有附加属性“additionalTask​​s”(存储一些服务器生成的新节点信息)的修改节点数据。如果商店的所有侦听器都已经获得了实例化的记录对象而不是原始响应数据,我如何获得此属性的值?我尝试将此附加字段添加到我的模型中,但是当我检查侦听器函数中记录的值时,它们显示为空。

    Ext.define('ExtendedTask', {
        extend: 'Ext.data.NodeInterface',
        fields: [
            { name : 'additionalData', type : 'auto', defaultValue : null, persist : false}
        ]
    });

var store = Ext.create("Ext.data.TreeStore", {
    model : 'ExtendedTask',
    autoSync: false,
    proxy : {
        method: 'GET',
        type : 'ajax',
        api: {
            read : 'tasks.js',
            update : 'update.php',
            create : 'update.php'
        },
        reader : {
            type : 'json'
        }
    },
    listeners: {
        update : function(){
            console.log('arguments: ', arguments);
        }
    }
});

这是我的 update.php 响应:

<?php
echo '[ { "Id" : 1,'.
    '"Name" : "Planning Updated",'.
    '"expanded" : true,'.
    '"additionalData": ['.
    '    {'.
    '        "Name" : "T100",'.
    '        "parentId" : null'.
    '    }'.   
    ']'.
']';
?>
4

2 回答 2

1

商店的代理始终保留最新请求的原始响应。尝试这样的事情,看看你需要的信息是否在那里。

update : function(){
   console.log(this.proxy.reader.rawData);
}
于 2013-02-13T20:53:54.437 回答
0

我遇到了同样的问题。我最终要做的是使用标准树模型属性(我使用过cls)来处理您尝试加载到模型中的任何自定义数据。我可能是错的,但从我开始研究这个问题开始,似乎 extjs 迫使树模型只使用标准字段。他们说:

如果没有指定模型,将创建一个实现 Ext.data.NodeInterface 的隐式模型。标准的树字段也将被复制到模型上以维护它们的状态。这些字段列在 Ext.data.NodeInterface 文档中。

然而,从测试看来,无论是否指定了模型,似乎只有标准字段可用。我能找到的唯一解决方法是使用我不需要的标准字符串类型字段 like cls,尽管我很想看看是否有人找到了更好的方法。

http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.TreeStore

于 2013-02-04T05:31:44.310 回答