在對樹節點進行操作後往往需要進行reload操作刷新一下樹,但是很多業務都需要在樹形刷新後預設選取最後一次選取的節點。這樣就必須先保存前一次選取節點的信息,在reload之後再次透過節點的資訊進行expand逐層展開到這個節點上。
查詢了好久終於找到一個可行的方案,就是透過節點的path來記錄節點的位置信息,然後透過path從root節點開始逐層展開,直到最後一個節點。
完成的代碼如下:
首先是extjs3.x版本中的方法:
//取得選取的節點
var node = tree.getSelectionModel().getSelectedNode();
if(node == null) { //沒有選取重載樹
tree.getRootNode().reload();
} else { //重載樹並預設選取上次選取的節點
var path = node.getPath('id');
tree.getLoader().load(tree.getRootNode(),
function(treeNode) {
tree.expandPath(path, 'id', function(bSucess, oLastNode) {
tree.getSelectionModel ().select(oLastNode);
});
}, this);
}
跟Extjs3.0不同Extjs4.2的寫法如下
idPath = selNode.getPath("id")
idPath = selNode.getPath("id")
tree. getStore().load({
node: tree.getRootNode(),
callback: function () {
tree.expandPath(idPath, 'id');
}
}) ;
要注意的是後台回傳的樹的json資料時節點必須包含id屬性,原本我沒有這個屬性,但是我把getPath方法中的參數改成其他的一個屬性。事實證明這樣是達不到效果的,最後在json中加入了id屬性才成功的。