在使用Ext.selection.CheckboxModel的网格上运行getSelectionModel().clearSelections()
并使用选择列顶部的“全选”复选框选中所有行时,“全选”复选框仍然检查。
我做了一个肮脏的黑客来绕过这个,但我想知道是否有一个更清洁的方式或如果这是一个错误。
答案 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');
希望这有帮助!