Javascript 如何知道所选节点是否为树中的叶子?(ExtJS 4)

Javascript 如何知道所选节点是否为树中的叶子?(ExtJS 4),javascript,extjs,Javascript,Extjs,我有一个树面板,我想把一个动作与点击这棵树的叶子相关联。我设法将一个关联到树元素上的每次单击,但我不仅关联到叶子 在我的代码中,我尝试了一些非常简单的函数:(menu是一个视图扩展tree.Panel) 有人帮我吗?试试: Ext.define('WSR.controller.MenuControl', { extend: 'Ext.app.Controller', views: [ 'Menu', 'Browser' ], refs:[ { sel

我有一个树面板,我想把一个动作与点击这棵树的叶子相关联。我设法将一个关联到树元素上的每次单击,但我不仅关联到叶子

在我的代码中,我尝试了一些非常简单的函数:(menu是一个视图扩展tree.Panel)

有人帮我吗?

试试:

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
        }

    }
}
}))


如果您有节点id,则可以尝试以下代码:

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

这个问题来自去年,但这个解决方案可能对某些人有所帮助

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

只需修改两个细节:
selector:'menu'、
(我定义的别名没有大写字母)和
var nodes=myTreePanel.getSelectionModel().getSelection()。但这两种测试都很好!非常感谢。
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());
    } 
}