2012-04-02 5 views
1

私はツリーパネルを持っており、このツリーの葉のクリックにアクションを関連づけたいと思います。ツリー要素のクリックごとに1つずつ関連付けることができましたが、私は葉だけでなく、選択したノードがツリー内のリーフであるかどうかを知る方法を教えてください。 (ExtJS 4)

ここに私のコードは、私は非常に単純な機能でそれを試してみました:(メニューはtree.Panelを拡張する図である)

Ext.define('WSR.controller.MenuControl', { 

    extend: 'Ext.app.Controller', 

    views: [ 
     'Menu', 
     'Browser' 
    ], 

    stores: [ 'UserStore' ], 

    init: function() { 

     this.control({ 
      'menu': { 
       itemclick: this.onItemClicked 
      } 
     }); 
    }, 

    onItemClicked: function() { 
     console.log('ItemClicked'); 
    } 
}); 

私を助けてくださいするために、誰かがありますか?

答えて

2

試行:

Ext.define('WSR.controller.MenuControl', { 

extend: 'Ext.app.Controller', 

views: [ 
    'Menu', 
    'Browser' 
], 

refs:[ 
    { 
     selector: 'Menu', //Suggest u to use a selector that is more "tightened" in case you have more trees of this type 
     ref: 'mynicetree' 
    } 
], 

stores: [ 'UserStore' ], 

init: function() { 

    this.control({ 
     'menu': { 
      //I suggest u use selectionchange instead, itemclick won't work if the use navigate the tree nodes using keyboard, whereas selectionchange fit both 
      selectionchange: this.loadStuff 
     } 
    }); 
}, 

loadStuff: function() { 

    //Assuming you can only select one node at a time (typical use case) 
    var myTreePanel = this.getMynicetree(); 
    var nodes = myTreePanel.getSelectionModel().selection(); 
    if(!Ext.isEmpty(nodes)) 
    { 
     var selNode = nodes[0]; 
     if(selNode.get("leaf")) //Assuming your NodeInterface "leaf" property was assigned 
     { 
      //Its a leaf 
     } 

     //OR 
     if(selNode.isLeaf()) 
     { 
      //Its a leaf 
     } 

    } 
} 

})。

HTH!あなたはノードIDをお持ちの場合

+0

のための役に立つかもしれません: 'セレクタ: 'メニュー'、'(帽子文字なしのエイリアスを定義しました) 'var nodes = myTreePanel.getSelectionModel()。getSelection();'しかし、それは両方のテストでうまく動作します!ありがとうございました ! – Malex

0

は、あなたは以下のようなコードを試すことができます。

taxonomyTreeLoader.on("load", function(){ 
      if(isQueryExecutable && singleParamDynamicQuery &&docTypeCodeDynamciQuery.length>0){ 
       var currentNode=taxonomyTree.getNodeById(docTypeNodeId); 
       if(currentNode.isLeaf()){ 
        taxonomyTree.getSelectionModel().select(currentNode); 
        taxonomyTree.fireEvent("click", currentNode); 
       } 
      } 
     });  
0

質問は、昨年からですが、このソリューションは、わずか2つの詳細を変更しなければならなかった誰か

init:function(){ 
    this.control({ 
     //Component listeners 
     'menu': { 
      itemclick: this.onItemClicked 
     } 
    }); 

    this.application.on({ 
     //Event handlers 
    }); 

}, 

onItemClicked: function(tree, record) { 
    if(record.isLeaf()){ 
     alert('related: '+"\n"+record.getId()); 
     console.log(record.getId()); 
    } 
} 
関連する問題