1

在使用 Ext.selection.CheckboxModel 的网格上运行 agetSelectionModel().clearSelections()并且使用选择列顶部的“全选”复选框选择了所有行时,“全选”复选框保持选中状态。

我做了一个肮脏的黑客来解决这个问题,但我想知道是否有更清洁的方法或者这是否是一个错误。

4

3 回答 3

6

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

listeners: {
   selectionchange: function(grid, selected) {
        if(!selected.length) {
            grid.getSelectionModel().deselectAll();
        }
   }
}

顺便说一句,你试过getSelectionModel().deselectAll()吗?clearSelections 在 ExtJS 4.1 中已被弃用,它在视图而不是选择模型上运行。

于 2012-10-25T00:00:55.400 回答
0

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

.getSelectionModel().deselectAll()

确实是要走的路。

由于历史原因,我包括了我为解决问题所做的原始肮脏黑客:

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

gridcolumn-1031 是在我的应用程序中包装复选框的 div 的 id。它是随机生成的,因此您需要自己检查以执行相同的脏黑客操作。

免责声明!使用后果自负。

我不容忍这样的肮脏黑客行为,因为它不太可能在我的网格的自动生成的 id 更改中幸存下来,但它会在我们等待更永久的解决方案时让我的客户批准该应用程序。

于 2012-10-23T14:39:10.687 回答
0

删除网格标题选择:

.getSelectionModel().deselectAll()

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

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

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

希望这可以帮助!

于 2013-02-04T23:11:54.690 回答