EXTJS 树面板禁用选择更改

EXTJS tree panel disable selection change

我有树面板:

        xtype : 'treepanel',
        itemId : 'field-tree-command-metas',
        region : 'center',
        hideHeaders : true,
        rootVisible : false,
        emptyText : 'No Commands Available',
        deferEmptyText : true,
        bufferedRenderer : false,
        reference : 'treeCommandMetas',
        bind : {
            selection : '{bindSelection}'
        },
        listeners : {
            boxready : function() {
                var treeView = this.getView();
                treeView.refresh();
            }
        },
        columns : [ {
            xtype : 'noicontreecolumn',
            dataIndex : 'name',
            flex : 1,
            nodeIconsProvider : function(record) {
                if (record.isLeaf()) {
                    return [ '<i class="' + Glyphs.getIconClass('square-o', 'size-14px') + '"></i>' ];
                }

                if (record.isExpanded()) {
                    return [ '<i class="' + Glyphs.getIconClass('folder-open-o', 'fa-lg') + '"></i>' ];
                }

                return [ '<i class="' + Glyphs.getIconClass('folder-o', 'fa-lg') + '"></i>' ];
            }
        } ],
        displayField : 'name',
        store : 'Plugin.scheduler.store.CommandMetaStore'

在此树中加载的表单上,选择了一条记录。 是否可以禁用其他选择?我的意思是,如果选择了树中的某些内容,则用户无法更改选择。 已尝试 'disableSelection:true' 但它会禁用所有选择,我希望默认情况下可见的选择。

您可以使用 setLocked 禁用其他选择:

treepanel.getSelectionModel().setLocked(true);

如果你想启用选择,你可以使用相反的方式:

treepanel.getSelectionModel().setLocked(false);

我这里有一个使用 ExtJS 4.2.1 的例子:https://fiddle.sencha.com/#fiddle/nqf

实施 beforeselect 侦听器并使其 return 为 false 以禁用鼠标单击选择:

listeners:{
    boxready : your boxready function,
    beforeselect :function(){
        return false;
    }
}

然后无论何时单击树的任何一行,选择都不会改变。

这里是 api 解释:

beforeselect( this, record, index, eOpts )
Fired before a record is selected. If any listener returns false, the selection is cancelled. Please refer api doc here.