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