2012-04-02 4 views
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

Try:

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!

+0

Просто пришлось изменить две детали : 'selector: 'menu',' (я определил псевдоним без буквы cap) и '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

вопрос с прошлого года, но это решение может быть полезным для кого-то

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