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

时间:2010-06-05 19:46:35

标签: extjs

我在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"}]]

2 个答案:

答案 0 :(得分:3)

您需要覆盖TreePanel中的processResponse函数,然后您将能够返回您想要的任何格式的JSON:

来自ExtJS论坛: http://www.extjs.com/forum/showthread.php?32772-Passing-JSON-string-from-Grails-to-populate-TreePanel

该主题底部的代码可以帮助您。

答案 1 :(得分:0)

据我所知,你想用json传递额外的参数,并在加载树时将其显示在其他地方。

在这种情况下,您只需从服务器修改后的JSON返回

[{         id:1,         yourParmam:'val',         文字:'叶子节点',         叶:真的     },{         id:2,         yourParmam:'val',         text:'文件夹节点',         孩子:[{             id:3,             yourParmam:'val',             文字:'儿童节点',             叶:真的         }]    }]

然后订阅甚至加载:(对象,对象节点,对象响应)并简单地解析响应以找出你的parm并做你需要的任何事情