ExtJS:显示/隐藏复选框选择更改

时间:2016-09-22 19:35:48

标签: checkbox listener hide show extjs5

我有一个ExtJS检查树ExtJS Check Tree,我试图根据检查/取消选中的项目添加一些控件。但它似乎没有正确启动。

这是Fiddle Example

当选中复选框“A”时,我想要隐藏文本字段'testValue',该字段有效,但如果我取消选中复选框“A”,我想显示文本字段'testValue',这不起作用。

对于这个测试,我只是想看看selections.selected.length === 0。但是,当我取消选中任何复选框时,监听器似乎没有被触发,因为警报消息没有被触发 - 而且,如果我再尝试重新选中该复选框,它仍然不会触发。

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

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

欢迎任何建议!

修改 添加allowDeselect: trueselectdeselect类型的监听器(我更新了小提琴以展示行为):

 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”时,文本字段仍然隐藏,但如果您在列表中选择另一个项目然后取消选择它,则文本字段将返回。

我正在尝试单独使用getChecked()方法,同时发生selectionchange事件。但是,这似乎只在我提交时返回数据(例如,在Get checked nodes控件上)。任何建议都是最受欢迎的。这不应该那么困难。

2 个答案:

答案 0 :(得分:1)

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

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

其他,如果你关心的是找出哪些项目被检查,你可以使用the getChecked() method on the TreePanel

答案 1 :(得分:1)

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

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

checkchange(节点,已检查,eOpts) 具有复选框的checked属性的节点更改时触发

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

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

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

TIMESTAMP