我有以下情况。我有一个与我的服务器同步的TreeStore。服务器响应返回修改后的节点数据,并附加一个属性“additionalTasks”(存储一些服务器生成的新节点信息)。如果所有商店的侦听器都已获得实例化的记录对象而不是原始响应数据,那么如何获取此属性的值?我已经尝试将这个附加字段添加到我的模型中,但是当我检查它在侦听器函数中的记录值时,它们显示为null。
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'.
' }'.
']'.
']';
?>
答案 0 :(得分:1)
商店的代理始终保留最近请求的原始响应。尝试这样的事情,看看你需要的信息是否存在。
update : function(){
console.log(this.proxy.reader.rawData);
}
答案 1 :(得分:0)
我遇到了同样的问题。我最终要做的是使用标准树模型属性(我使用cls
)来处理您尝试加载到模型中的任何自定义数据。我可能错了,但从我看这个问题的时候,似乎extjs强迫树模型只使用标准字段。他们说:
如果未指定Model,则将创建一个实现Ext.data.NodeInterface的隐式模型。标准树字段也将复制到模型上以维持其状态。这些字段列在Ext.data.NodeInterface文档中。
然而,从测试开始,无论是否指定了模型,似乎只有标准字段可用。我能找到的唯一解决方法是使用一个我不需要的标准字符串类型字段,如cls
,但我有兴趣看看是否有人找到了更好的方法。