2016-09-05 110 views
-1

我被困在創建一個樹面板的例子。我只獲得一棵無限樹。我做錯了什麼?ExtJs 4.2 treepanel

模型

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:''} 
] 
}); 

STORE

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

VIEW

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

什麼是我做錯了嗎?任何線索?

+0

你可以請一把小提琴嗎?當你這樣做時,請檢查問題是否你的模型不是來自['Ext.data.TreeModel'](http://docs.sencha.com/extjs/4.2.2/#!/api/Ext .data.TreeModel)。 – Alexander

+0

在你的PHP代碼中,你想達到什麼目的?因爲,在ExtJS代碼中沒有什麼問題,當我在樹中展開一個節點時,商店URL將會被擊中,php代碼將會執行並返回相同的一組節點。 – Saloo

+0

你是否也可以發佈你的回覆數據? –

回答

0

請確保您的響應數據應該在「數據」標籤下,因爲在您的商店中,您已經提到根節點爲'data'[root:'data'],但似乎您正在發送一組子節點不在'數據'節點下。請張貼您的回覆數據。

0

實際上樹是這樣工作的,如果它不是葉子,當你打開它請求指定的URL。如果它是一個葉子,那麼它會停止發送請求。所以在後端你必須管理你的響應,並且你必須爲所有的終端節點設置葉子,那麼它將工作,否則它將是無限的樹。

在你的情況下,首先你的請求一個API所以服務器給出響應,但所有節點的葉子是假的。當你再次打開A0節點時,它請求相同的URL並在該響應中得到相同的響應,所有的葉子都是假的這一直延續下去。所以你必須在後端處理它,對於所有的終端節點,你必須使葉子真實,那麼它會正常工作

+0

我已經得到了這個問題,並解決了我自己如果你想樣本我會發布我的示例代碼 –