extjs复选框标题出现问题

时间:2018-07-26 15:18:22

标签: checkbox extjs extjs4

我目前正在ExtJS中实现项目的一部分,这要求我修改现有网格以仅在具有特定状态(不同于AN,NP,RS)的行上显示复选框。由record.data.codiceStato中的值确定:

selectionModel = Ext.create('Ext.selection.CheckboxModel', {
    checkOnly: true,
    listeners: {
        select: function (sm, idx, rec) {
            alert("Look ma!");
        },
        beforeSelect: function (sm, idx, rec) {
            if (idx.data.codiceStato == 'RS' || idx.data.codiceStato == 'AN' || idx.data.codiceStato == 'NP')
                return false;
        }
    },
    renderer: function (value, metaData, record, rowIndex, colIndex, store, view) {
        if (record.data.codiceStato != 'RS' && record.data.codiceStato != 'AN' && record.data.codiceStato != 'NP')
            return '<div style="margin-left: -1px;" class="' + Ext.baseCSSPrefix + 'grid-row-checker"> </div>';

        else
            return '';
    }
});

我在 beforeSelect 侦听器中写了一个支票,以避免选中该复选框来选择不具有此状态的行,并且该行有效。唯一的问题是现在带有标题复选框,实际上,当我第一次单击它时,它启用了带有复选框的所有行,但是当我再次单击它时,它并没有取消选中它们。有什么解决办法吗?谢谢

1 个答案:

答案 0 :(得分:0)

基本上,有一些代码(Ext.selection.CheckboxModel.updateHeaderState)通过查看是否selected.count = store.count来确定是否需要检查标头。就您而言,它不是,所以您需要在代码中覆盖此功能,以便selected.count = selectable.count。

尽管这是一个私有方法,所以Sencha不能保证在各个版本之间都保持一致,因此,升级后需要密切注意。

基本上采用selmodel并添加一个对象。这将覆盖框架中通常存在的那个。

var selModel = Ext.create('Ext.selection.CheckboxModel', {
    ...
    updateHeaderState: function() {
         // copy code from your Ext framework here, but modified for your use case
    }
});