我有一个ExtJS检查树ExtJS Check Tree,我试图根据检查/取消选中的项目添加一些控件。但它似乎没有正确启动。
当选中复选框“A”时,我想要隐藏文本字段'testValue'
,该字段有效,但如果我取消选中复选框“A”,我想显示文本字段'testValue'
,这不起作用。
对于这个测试,我只是想看看selections.selected.length === 0
。但是,当我取消选中任何复选框时,监听器似乎没有被触发,因为警报消息没有被触发 - 而且,如果我再尝试重新选中该复选框,它仍然不会触发。
我会使用选择模型(如下所述)来实现这一点(因为我知道它有效),但是当我只想要带有复选框的叶节点时,这会在我的所有树项上放置复选框。
selModel: {
type: 'checkboxmodel',
listeners: {
selectionchange: 'onCheckedNodesChange'
}
}
欢迎任何建议!
修改
添加allowDeselect: true
和select
和deselect
类型的监听器(我更新了小提琴以展示行为):
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
控件上)。任何建议都是最受欢迎的。这不应该那么困难。
答案 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