如何取消选中Ext.selection.CheckboxModel中的全选复选框

时间:2012-10-23 14:39:11

标签: javascript extjs extjs4

在使用Ext.selection.CheckboxModel的网格上运行getSelectionModel().clearSelections()并使用选择列顶部的“全选”复选框选中所有行时,“全选”复选框仍然检查。

我做了一个肮脏的黑客来绕过这个,但我想知道是否有一个更清洁的方式或如果这是一个错误。

3 个答案:

答案 0 :(得分:6)

我会尝试在网格组件上放置一个侦听器来跟踪选择更改(不确定它是否有用):

listeners: {
   selectionchange: function(grid, selected) {
        if(!selected.length) {
            grid.getSelectionModel().deselectAll();
        }
   }
}
是的,你试过getSelectionModel().deselectAll()吗?在ExtJS 4.1中不推荐使用clearSelections,它在视图非选择模型上运行。

答案 1 :(得分:0)

修改 在阅读了Vyacheslav Voronchuk的回答后,我回过头来验证文档确实说明了clearSelection是一个不发送事件的私有函数,因此没有通知复选框应该被清除。

.getSelectionModel().deselectAll()

确实是要走的路。

由于历史原因,我将我原来的肮脏黑客包括在内,以解决问题:

var el = Ext.get("gridcolumn-1031");
el.removeCls('x-grid-hd-checker-on');

gridcolumn-1031是包含我的应用中的复选框的div的ID。它是随机生成的,所以你需要检查你自己做同样的脏黑客。

免责声明!自担风险。

我不容忍像这样的脏黑客,因为它不太可能在我的网格自动生成的id更改中存活,但是当我们等待更持久的解决方案时,它将获得我的客户批准的应用程序。

答案 2 :(得分:0)

用于删除网格标题选择:

.getSelectionModel().deselectAll()

对我来说不起作用,因为我的网格已经空了。

这虽然有效(来自上面的黑客):

var selectionHeadID = Ext.getCmp('ingameGrid').headerCt.getHeaderAtIndex(0).getId();
var el = Ext.get(selectionHeadID);
el.removeCls('x-grid-hd-checker-on');

希望这有帮助!