从ExtJS TreeLoader dataUrl返回除树数据之外的额外数据?

从ExtJS TreeLoader dataUrl返回除树数据之外的额外数据?,extjs,Extjs,我在ExtJS论坛上问过这个问题,但没有收到任何回复,所以我在这里提问 我有一个使用TreeLoader和AsyncTreeNode的TreePanel(下面的代码)。在TreeLoader的dataUrl指定的API方法中,我返回一个JSON数组来填充树 当然,这很有效。但是,除了数组之外,我还需要返回一个附加项——一个整数,并且我需要在UI的其他地方显示该值。这可能吗?如果不是,还有什么好的解决方案 以下是我目前拥有的代码: tree = new Ext.tree.TreePanel({

我在ExtJS论坛上问过这个问题,但没有收到任何回复,所以我在这里提问

我有一个使用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);
    }
  }
});

据我所知,您希望用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"}]]