【问题标题】:ExtJs 4.2 treepanelExtJs 4.2 树形面板
【发布时间】:2016-09-05 16:06:14
【问题描述】:

我无法创建树面板的示例。我只获得了一个无限的树。我做错了什么?

型号

Ext.define('mdlDocumentosTree', {
extend: 'Ext.data.Model',
fields:[
        {name:'id',                 type:'string',      mapping:''},
        {name:'text',               type:'string',      mapping:''},
        {name:'leaf',               type:'boolean',     mapping:''},
        {name:'iconCls',            type:'string',      mapping:''}
]
});

商店

Ext.define('strDocumentosTree', {
extend: 'Ext.data.TreeStore',
model:  'mdlDocumentosTree',
autoLoad: false,
proxy: {
    type: 'ajax', 
    api: {read: 'some url'},
    reader: {
                type: 'json',
                root: 'data',
                totalProperty: 'total',
                successProperty: 'success'
    }
}
});

查看

var arbolcarpetas=new Ext.tree.Panel({
        itemId:'arbolcarpetas',
        title:'Archivos del Expediente',
        region:'west',
        width:250,
        collapsible:true,
        border: false,
        autoScroll:true,
        store:almacenDocumentos,
        rootVisible: false
    })

控制器

在控制器中,我使用以下命令加载树存储:

Ext.ComponentQuery.query('viewFichaDetalle #arbolcarpetas')[0].getStore().load();

而store的php是:

<?php
$x=0;
$nodes = array();
while($x<10){
    array_push($nodes,array('text'=>"A".$x, 'id'=>$x,'children'=>array('text'=>"A".rand(10,100),'id'=>$x,leaf=>true,'iconCls'=>'icon-excel')));
    $x++;
}
echo json_encode($nodes);
?>

结果就是这棵无限大的树:

我做错了什么?有什么线索吗?

【问题讨论】:

  • 你能做一个小提琴吗?当你这样做时,请检查问题是否是你的模型不是从Ext.data.TreeModel派生的。
  • 在你的 PHP 代码中,你想要实现什么?因为,我觉得 ExtJS 代码中没有问题,当您在树中展开一个节点时,商店 url 将被命中,并且该 php 代码将执行并返回相同的节点集。
  • 您也可以发布您的回复数据吗?
  • 我想创建只运行一次 php 的树,事实是当你展开一个节点时,它会再次执行 php,并将节点属性发送到该 php。所以我正在创建树像这样,在扩展节点时接收节点并添加其叶子

标签: javascript php extjs extjs4.2


【解决方案1】:

请确保您的响应数据应位于“数据”标签下,因为在您的商店中您已将根节点提到为 'data' [root: 'data'] ,但您似乎正在发送子节点数组不在“数据”节点下。请同时发布您的回复数据。

【讨论】:

    【解决方案2】:

    实际上,如果打开它时它不是叶子,它会请求指定的 url,它的工作原理是这样的。如果它是叶子,则它停止发送请求。所以在后端你必须管理你的响应,你必须为所有的端节点设置叶子为真,然后它将工作,否则它将是无限树。

    在您的情况下,首先您请求一个 api,因此服务器给出响应,但所有节点的叶子都是错误的。当您再次打开 A0 节点时,它会请求相同的 url,并且会在该响应中得到相同的响应,所有叶子都是错误的永远继续。所以你必须在后端处理它,对于所有端节点,你必须使叶子为真,然后它会正常工作

    【讨论】:

    • 我已经遇到了这个问题,如果你想要示例我会自己解决这个问题,我会发布我的示例代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多