2012-05-31 47 views
0

我有一個樹面板,我編程擴展。ExtJs樹面板。如何滾動到節點

當我展開一個節點,我想「跳」這個節點,我的意思是滾動到它。

如何滾動樹面板特定節點?

UPDATE: 我用分機4.1

+0

您使用的是什麼版本的ExtJs? – sha

+0

我使用ExtJS的4.1 – Charles

回答

1

在ExtJS的3.x中,你可以嘗試調用焦點()在TreeNodeUI(myNode.ui.focus())

0

樹是異步加載的每一個節點,你需要調用的所有節點已經被加載後,才進行對焦。你將需要做的是設置你的根節點上自動加載爲false,那麼在後面的代碼使用手動加載根節點的第一次:

rootNode.expand(true, function(){ 
    myTreePanel.getView().focusRow(nodeyouwanttofocus); 
}); 

做這種方式讓您使用擴展功能,使擴大完全遞歸併且還的第一個參數確保所有節點被加載之後是一個函數的第二個參數只執行,guarenteeing該視圖是正確的高度與該節點在視覺上存在。

另一種選擇,可以讓更多的flexability是掛鉤到擴展事件:

var myTreeStore = Ext.create("Ext.data.TreeStore", { 
    listeners: { 
     expand: function(theParentNode){ 
      theParentNode.eachChild(function(node){ 
       if(nodeIWantSelected == node) 
        myTreePanel.getView().focusRow(node); 
      } 
     } 
    } 
}); 

,您可以使用選擇模型。選擇鉤在選擇節點(我認爲這可能集中節點也)。

我還沒有嘗試過由沙之前提出「selectPath」,這似乎是一個更容易使用,但你可以在focusRow功能回調掛鉤,我認爲這工作了。

0

您可以使用tree.getView().focusRow(),喜歡它:

tree.expandPath(
    '/root/1/2/3', 
    'id', 
    '/', 
    function() { 
     tree.getView().focusRow(tree.getStore().getNodeById('3')); 
    } 
}); 

但是,如果你的樹使用animate: true和異步加載每個節點與路徑中的任何節點尚未加載這個方法行不通的(樹沒有滾動到由於多個佈局更新而選擇的節點)。

至於解決方法,您可以:

  1. 設置animate: false的樹;
  2. 添加「afterlayout」監聽器,就像這樣:

    tree.on('afterlayout', function() { 
        tree.getView().focusRow(tree.getSelectionModel().getSelection()[0]); 
    } 
    

    我想你可以在需要時添加此處理程序,並刪除它時,一切都做。

相關問題