ExtJS:Show/hide 控制复选框选择更改

ExtJS: Show/hide control on checkbox selectionchange

我有一个 ExtJS 检查树 ExtJS Check Tree,我正在尝试根据项目 checked/unchecked 添加一些控件。虽然它似乎没有正确触发。

这是一个Fiddle Example

当复选框 'A' 被 select 编辑时,我想隐藏文本字段 'testValue',这有效,但是如果我取消 select 复选框 'A',我想显示文本字段,'testValue',这是行不通的。

对于这个测试,我只是想看看 selections.selected.length === 0。但是,当我取消select 任何复选框时,听众似乎没有触发,因为警报消息没有被触发 - 另外,如果我然后尝试再次重新select 复选框它仍然没有开火。

我会使用 selection 模型(如下所述)来实现此目的(因为我知道它有效),但是当我只想拥有叶子时,这会在我所有的树项目上放置复选框带有复选框的节点。

selModel: {
        type: 'checkboxmodel',
        listeners: {
            selectionchange: 'onCheckedNodesChange'
        }
    }

欢迎提出任何建议!

编辑 添加 allowDeselect: trueselectdeselect 的监听​​器有点奏效(我更新了 Fiddle 以展示行为):

 selModel: {  
                allowDeselect: true,
                listeners: {
                    deselect: function(model, record, index) {
                        text = record.get('text');
                        alert(text);
                    },
                    select: function(model, record, index) {
                        text = record.get('text');
                        alert(text);
                    }
                }

            },

我想确保当 'A' 被 select 编辑时,文本字段保持隐藏状态,但是如果您 select 列表中的另一个项目然后 deselect 它,文本字段 returns.

我试图在 selectionchange 事件发生时单独使用 getChecked() 方法。但是,当我提交时,这似乎只有 return 数据(例如,在 Get checked nodes 控件上)。欢迎提出任何建议。这个应该不难吧。

您看到的复选框不是选择行为的一部分。相反,它们来自 NodeInterface class.

上的 checked configuration

您的树面板正在使用 default selModel,这是基于行的选择,没有取消选择选项。如果您希望树内检查来控制选择,则需要手动配置,可能是通过监听商店中的更改事件。

OTH,如果你只关心找出哪些项目被选中,你可以使用 the getChecked() method on the TreePanel

对于树面板,我们有 checkchange 事件,它类似于 selectionchange 事件。

http://docs.sencha.com/extjs/4.2.5/#!/api/Ext.tree.Panel-event-checkchange

checkchange(节点,检查,eOpts) 当一个带有复选框的节点检查属性更改

时,会发射。

参数 节点:Ext.data.TreeModel 检查的节点 属性 已更改。

选中:布尔值 节点的新检查状态

eOpts:对象 传递给 Ext.util.Observable.addListener.

的选项对象
var fields = [
            {
                name: 'column'
            },
            {
                name: 'leaf',
                type: 'boolean'
            },
            {
                name: 'checked',
                type: 'boolean'
            },
            {
                name: 'cls',
                type: 'string',
                defaultValue: 'x-tree-noicon'
            },
        ];

        this.dataModel = Ext.define('Filter-' + this.getId(), {
            extend: 'Ext.data.Model',
            fields: fields,
        });


     columns: [
                 {
                            xtype: 'treecolumn',
                            width: 200,
                            itemId: "filter",
                            dataIndex: 'column' ,
                            renderer: function (val, metaData, r) {

                            },
                            scope: this,
                        },
                    ],
                    listeners: {
                        'checkchange': Ext.bind(function (node, checked,eOpts)         { 
                        },
                        scope: this