我在Ext JS论坛上问过这个问题,但我没有收到回复,所以我在这里问。
我有一个使用TreeLoader和AsyncTreeNode的TreePanel(下面的代码)。在我的TreeLoader的dataUrl指定的API方法中,我返回一个JSON数组来填充树。
当然,这很有用。但是,除了数组之外,我还需要返回一个附加项 - 整数 - 我需要在我的UI中的其他位置显示该值。这可能吗?如果没有,还有什么是好的解决方案?
这是我目前的代码:
tree = new Ext.tree.TreePanel({
enableDD: true,
rootVisible: false,
useArrows: true,
loader: new Ext.tree.TreeLoader({
dataUrl: '/api/method'
}),
root: new Ext.tree.AsyncTreeNode()
});
我想为整个响应返回一个整数值 - 而不是每个节点。基本上我的API方法将创建一个数据库记录,我需要从该数据库记录中返回一个值。
编辑感谢迈克,我已经解决了这个问题。我像这样扩展了Ext.tree.TreeLoader类:
TreeLoaderWithMetaData = Ext.extend(Ext.tree.TreeLoader, {
processResponse : function(response, node, callback) {
var json = response.responseText;
try {
var o = eval("("+json+")");
metaData = o.shift();
node.beginUpdate();
for(var i=0, len=o.length; i<len; i++) {
var n = this.createNode(o[i]);
if (n) {
node.appendChild(n);
}
}
node.endUpdate();
if(typeof callback == "function") {
callback(this, node);
}
}
catch (e) {
this.handleFailure(response);
}
}
});
然后我可以像公共成员一样引用元数据中的变量:metaData.my_variable1,metaData.my_variable2。来自服务器的我的AJAX数据只有一个额外的数组项:
[{"my_variable1":"value1","my_variable2":"value2"},{"id":"node1","text":"Node 1",children:[{"id":"node1nodeA","text":"Node 1 Node A"}]]
答案 0 :(得分:3)
您需要覆盖TreePanel中的processResponse函数,然后您将能够返回您想要的任何格式的JSON:
该主题底部的代码可以帮助您。
答案 1 :(得分:0)
据我所知,你想用json传递额外的参数,并在加载树时将其显示在其他地方。
在这种情况下,您只需从服务器修改后的JSON返回
[{ id:1, yourParmam:'val', 文字:'叶子节点', 叶:真的 },{ id:2, yourParmam:'val', text:'文件夹节点', 孩子:[{ id:3, yourParmam:'val', 文字:'儿童节点', 叶:真的 }] }]
然后订阅甚至加载:(对象,对象节点,对象响应)并简单地解析响应以找出你的parm并做你需要的任何事情