从ExtJS TreeLoader dataUrl返回除树数据之外的额外数据?
我在ExtJS论坛上问过这个问题,但没有收到任何回复,所以我在这里提问 我有一个使用TreeLoader和AsyncTreeNode的TreePanel(下面的代码)。在TreeLoader的dataUrl指定的API方法中,我返回一个JSON数组来填充树 当然,这很有效。但是,除了数组之外,我还需要返回一个附加项——一个整数,并且我需要在UI的其他地方显示该值。这可能吗?如果不是,还有什么好的解决方案 以下是我目前拥有的代码:从ExtJS TreeLoader dataUrl返回除树数据之外的额外数据?,extjs,Extjs,我在ExtJS论坛上问过这个问题,但没有收到任何回复,所以我在这里提问 我有一个使用TreeLoader和AsyncTreeNode的TreePanel(下面的代码)。在TreeLoader的dataUrl指定的API方法中,我返回一个JSON数组来填充树 当然,这很有效。但是,除了数组之外,我还需要返回一个附加项——一个整数,并且我需要在UI的其他地方显示该值。这可能吗?如果不是,还有什么好的解决方案 以下是我目前拥有的代码: tree = new Ext.tree.TreePanel({
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);
}
}
});
据我所知,您希望用json传递额外的参数,并在加载树时在其他地方显示它 在这种情况下,您可以像这样简单地从服务器返回修改过的JSON [{ id:1, 你的爸爸:“瓦尔”, 文本:“叶节点”, 叶:是的 },{ id:2, 你的爸爸:“瓦尔”, 文本:“文件夹节点”, 儿童:[{ id:3, 你的爸爸:“瓦尔”, 文本:“子节点”, 叶:是的 }] }]
然后订阅甚至加载:(objectthis,objectnode,objectresponse)并简单地解析响应以找到您的parm并执行您需要的任何操作您需要覆盖TreePanel中的processResponse函数,然后您将能够返回您想要的任何JSON格式: 从ExtJS论坛:
该线程底部的代码将对您有所帮助 嗯,有点,除了我想为整个响应返回一个整数值——不是每个节点。基本上我的API方法将创建一个数据库记录,我需要从该数据库记录返回一个值。很好!!!如果我能吻你,我会的,但谢天谢地我不能。这正是我需要的。我将编辑带有解决方案详细信息的初始帖子。我对TreeGridLoader做了类似的操作,并在responseText中添加了对第一个元素的双重检查,以检查名为“\uuu metaData”的属性,如果没有,我不移动数组,这样即使我不返回元数据,我也可以使用相同的类。其他一些建议是使用Ext.decode(json)而不是eval,另外,查看TreeLoader::processResponse的代码,我认为您可以通过分配
response.responseData=o来调用父代码,而不是重复
然后使用superclass.processResponse
[{"my_variable1":"value1","my_variable2":"value2"},{"id":"node1","text":"Node 1",children:[{"id":"node1nodeA","text":"Node 1 Node A"}]]