在使用 Ext.selection.CheckboxModel 的网格上运行 agetSelectionModel().clearSelections()
并且使用选择列顶部的“全选”复选框选择了所有行时,“全选”复选框保持选中状态。
我做了一个肮脏的黑客来解决这个问题,但我想知道是否有更清洁的方法或者这是否是一个错误。
在使用 Ext.selection.CheckboxModel 的网格上运行 agetSelectionModel().clearSelections()
并且使用选择列顶部的“全选”复选框选择了所有行时,“全选”复选框保持选中状态。
我做了一个肮脏的黑客来解决这个问题,但我想知道是否有更清洁的方法或者这是否是一个错误。
我会尝试在网格组件上放置一个监听器来跟踪选择更改(不确定它是否有帮助):
listeners: {
selectionchange: function(grid, selected) {
if(!selected.length) {
grid.getSelectionModel().deselectAll();
}
}
}
顺便说一句,你试过getSelectionModel().deselectAll()
吗?clearSelections 在 ExtJS 4.1 中已被弃用,它在视图而不是选择模型上运行。
编辑: 在阅读了 Vyacheslav Voronchuk 的回答后,我回过头来验证文档确实说 clearSelection 是一个不发送事件的私有函数,因此没有通知应该清除复选框。
.getSelectionModel().deselectAll()
确实是要走的路。
由于历史原因,我包括了我为解决问题所做的原始肮脏黑客:
var el = Ext.get("gridcolumn-1031");
el.removeCls('x-grid-hd-checker-on');
gridcolumn-1031 是在我的应用程序中包装复选框的 div 的 id。它是随机生成的,因此您需要自己检查以执行相同的脏黑客操作。
免责声明!使用后果自负。
我不容忍这样的肮脏黑客行为,因为它不太可能在我的网格的自动生成的 id 更改中幸存下来,但它会在我们等待更永久的解决方案时让我的客户批准该应用程序。
删除网格标题选择:
.getSelectionModel().deselectAll()
对我不起作用,因为我的网格已经是空的。
这虽然有效(来自上面的hack):
var selectionHeadID = Ext.getCmp('ingameGrid').headerCt.getHeaderAtIndex(0).getId();
var el = Ext.get(selectionHeadID);
el.removeCls('x-grid-hd-checker-on');
希望这可以帮助!