extjs checkboxselection 标头未更新

Posted

技术标签:

【中文标题】extjs checkboxselection 标头未更新【英文标题】:extjs checkboxselection header not updating 【发布时间】:2011-11-01 16:28:42 【问题描述】:

我有一个带有 CheckBoxSelectionModel 的 ExtJs 网格。选中 header 复选框 会选中所有记录,取消选中复选框会取消选中所有记录,这当然是行为。我的网格有一个删除按钮来删除选定的/所有记录,并且工作正常。

现在我的问题是,当我选中标题处的复选框(以便选择整个记录)并点击我的删除按钮时,网格中的所有记录都将被删除。 但是,列标题中的复选框选择仍然保持选中状态。

我使用代码:grid.getSelectionModel().clearSelections(false); 清除选择,删除后。我猜,此代码仅适用于网格中的记录,与列标题部分无关。有什么办法,我可以取消选择标题中的复选框吗?

经过详细调查,我惊讶地发现 CheckBoxSelectionModel 中显示的复选框不是 html 复选框,而是图像。所以我使用 DOM 概念取消选中复选框的想法不能在这里应用。相反,必须使用某种 CSS 技巧。

以前有人遇到过这样的问题吗?有什么解决办法吗? 任何帮助将不胜感激。 谢谢!

【问题讨论】:

【参考方案1】:

将侦听器应用于 CheckboxSelectionModel :

试试这个:

    var sm = new Ext.grid.CheckboxSelectionModel(
    listeners : 
            selectionchange : function()
                var recLen = Ext.getCmp('grid').store.getRange().length;
                var selectedLen = this.selections.items.length;
                if(selectedLen == recLen)
                    var view   = Ext.getCmp('grid').getView();
                    var chkdiv = Ext.fly(view.innerHd).child(".x-grid3-hd-checker")
                    chkdiv.addClass("x-grid3-hd-checker-on");
                
            
            ,rowdeselect : function ( sm ,rowIndex ,record) 
                var view   = Ext.getCmp('grid').getView();
                var chkdiv = Ext.fly(view.innerHd).child(".x-grid3-hd-checker")
                chkdiv.removeClass('x-grid3-hd-checker-on');
            
    
 );

【讨论】:

嘿,谢谢@MMT。忙于一些工作。感谢您的解决方案。让我试一试,很快就会回来:)【参考方案2】:

添加一个 ELSE 检查以避免设置标题检查并更新 selectionmodel 选择小于存储长度的行时的情况:

var sm = new Ext.grid.CheckboxSelectionModel(
    listeners : 
            selectionchange : function()
                var recLen = Ext.getCmp('grid').store.getRange().length;
                var selectedLen = this.selections.items.length;
                var view   = Ext.getCmp('grid').getView();
                var chkdiv = Ext.fly(view.innerHd).child(".x-grid3-hd-checker")
                if(selectedLen == recLen)
                    chkdiv.addClass("x-grid3-hd-checker-on");
                 else 
                    chkdiv.removeClass("x-grid3-hd-checker-on");
                
            
            ,rowdeselect : function ( sm ,rowIndex ,record) 
                var view   = Ext.getCmp('grid').getView();
                var chkdiv = Ext.fly(view.innerHd).child(".x-grid3-hd-checker")
                chkdiv.removeClass('x-grid3-hd-checker-on');
            
    
 );

【讨论】:

【参考方案3】:

var view = grid.getView();
var chkdiv = Ext.fly(view.innerHd).child(".x-grid3-hd-checker");
chkdiv.removeClass("x-grid3-hd-checker-on");

我在上面直接添加到按钮点击监听器中。

【讨论】:

以上是关于extjs checkboxselection 标头未更新的主要内容,如果未能解决你的问题,请参考以下文章

ExtJs 入门教程

Extjs 3 到 Extjs 4 [关闭]

ExtJS:以 ExtJS 样式获取当前 URL

ExtJs3 中的 Extjs4 this.callParent

从另一个 extjs 脚本执行 extjs 脚本

无法将 extjs 3 迁移到 extjs 4