2012-04-02 8 views
1

Ich habe eine Baumansicht und möchte eine Aktion mit dem Klick auf ein Blatt dieses Baumes verknüpfen. Ich habe es geschafft, mit jedem Klick auf die Baumelemente einen zu verbinden, aber ich nicht nur zu den Blättern.Woher weiß ich, ob der ausgewählte Knoten ein Blatt in einem Baum ist? (ExtJS 4)

Hier mein Code, habe ich versucht, es mit sehr einfachen Funktionen: (Menü eine Ansicht erstreckt tree.Panel ist)

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

Gibt es jemand mir bitte helfen?

Antwort

2

Versuchen:

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

Nur zwei Details ändern : 'selector: 'menu',' (Ich habe den Alias ​​ohne den Anfangsbuchstaben definiert) und 'var nodes = myTreePanel.getSelectionModel(). getSelection();'. Aber es funktioniert gut mit beiden Tests! Vielen Dank ! – Malex

0

, wenn Sie Knoten-ID haben, dann können Sie Code wie unten probieren:

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

Frage ist aus dem letzten Jahr, aber diese Lösung könnte hilfreich sein, hatte für jemanden

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