Как узнать, является ли выбранный узел листом дерева?(ExtJS 4) - PullRequest
1 голос
/ 02 апреля 2012

У меня есть панель дерева, и я хотел бы связать действие с щелчком на листе этого дерева. Мне удалось связать по одному клику с элементами дерева, но я не только с листьями.

Вот мой код, я попробовал его с очень простыми функциями: (меню - это дерево, расширяющее представление. Панель)

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

Кто-нибудь может мне помочь, пожалуйста?

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

Попробуйте:

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 голосов
/ 10 ноября 2013

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

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());
    } 
}
0 голосов
/ 08 февраля 2013

если у вас есть идентификатор узла, вы можете попробовать код, как показано ниже:

 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);
                } 
            }   
        });    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...