ExtJs 4.2 treepanel

时间:2016-09-05 16:06:15

标签: javascript php extjs extjs4.2

我很难创建一个树面板的例子。我只获得了一棵无限的树。我做错了什么?

MODEL

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
    })

CONTROLLER

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

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

商店的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);
?>

结果是这个无限的树:

enter image description here

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

2 个答案:

答案 0 :(得分:0)

请确保您的回复数据应在&#34;数据&#34;标记因为在您的商店中您提到了根节点作为数据&#39; [root:&#39; data&#39;],但似乎您发送的子节点数组不在数据&#39;节点。请发布您的回复数据。

答案 1 :(得分:0)

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

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