Tôi đã tạo ra một phiên bản cập nhật của Ext.ux.CheckColumn cho điều này, chỉ bao gồm mã này sau khi mã ExtJS được bao gồm:
Ext.define('Ext.ux.CheckColumn', {
extend: 'Ext.grid.column.Column',
alias: 'widget.checkcolumn',
disableColumn: false,
disableFunction: null,
disabledColumnDataIndex: null,
columnHeaderCheckbox: false,
constructor: function(config) {
var me = this;
if(config.columnHeaderCheckbox)
{
var store = config.store;
store.on("datachanged", function(){
me.updateColumnHeaderCheckbox(me);
});
store.on("update", function(){
me.updateColumnHeaderCheckbox(me);
});
config.text = me.getHeaderCheckboxImage(store, config.dataIndex);
}
me.addEvents(
/**
* @event checkchange
* Fires when the checked state of a row changes
* @param {Ext.ux.CheckColumn} this
* @param {Number} rowIndex The row index
* @param {Boolean} checked True if the box is checked
*/
'beforecheckchange',
/**
* @event checkchange
* Fires when the checked state of a row changes
* @param {Ext.ux.CheckColumn} this
* @param {Number} rowIndex The row index
* @param {Boolean} checked True if the box is checked
*/
'checkchange'
);
me.callParent(arguments);
},
updateColumnHeaderCheckbox: function(column){
var image = column.getHeaderCheckboxImage(column.store, column.dataIndex);
column.setText(image);
},
toggleSortState: function(){
var me = this;
if(me.columnHeaderCheckbox)
{
var store = me.up('tablepanel').store;
var isAllChecked = me.getStoreIsAllChecked(store, me.dataIndex);
store.each(function(record){
record.set(me.dataIndex, !isAllChecked);
record.commit();
});
}
else
me.callParent(arguments);
},
getStoreIsAllChecked: function(store, dataIndex){
var allTrue = true;
store.each(function(record){
if(!record.get(dataIndex))
allTrue = false;
});
return allTrue;
},
getHeaderCheckboxImage: function(store, dataIndex){
var allTrue = this.getStoreIsAllChecked(store, dataIndex);
var cssPrefix = Ext.baseCSSPrefix,
cls = [cssPrefix + 'grid-checkheader'];
if (allTrue) {
cls.push(cssPrefix + 'grid-checkheader-checked');
}
return '<div class="' + cls.join(' ') + '"> </div>'
},
/**
* @private
* Process and refire events routed from the GridView's processEvent method.
*/
processEvent: function(type, view, cell, recordIndex, cellIndex, e) {
if (type == 'mousedown' || (type == 'keydown' && (e.getKey() == e.ENTER || e.getKey() == e.SPACE))) {
var record = view.panel.store.getAt(recordIndex),
dataIndex = this.dataIndex,
checked = !record.get(dataIndex),
column = view.panel.columns[cellIndex];
if(!(column.disableColumn || record.get(column.disabledColumnDataIndex) || (column.disableFunction && column.disableFunction(checked, record))))
{
if(this.fireEvent('beforecheckchange', this, recordIndex, checked, record))
{
record.set(dataIndex, checked);
this.fireEvent('checkchange', this, recordIndex, checked, record);
}
}
// cancel selection.
return false;
} else {
return this.callParent(arguments);
}
},
// Note: class names are not placed on the prototype bc renderer scope
// is not in the header.
renderer : function(value, metaData, record, rowIndex, colIndex, store, view){
var disabled = "",
column = view.panel.columns[colIndex];
if(column.disableColumn || column.disabledColumnDataIndex || (column.disableFunction && column.disableFunction(value, record)))
disabled = "-disabled";
var cssPrefix = Ext.baseCSSPrefix,
cls = [cssPrefix + 'grid-checkheader' + disabled];
if (value) {
cls.push(cssPrefix + 'grid-checkheader-checked' + disabled);
}
return '<div class="' + cls.join(' ') + '"> </div>';
}
});
sau đó thiết lập một ví dụ về một cột checkbox sẽ là như thế này :
{
xtype: "checkcolumn",
columnHeaderCheckbox: true,//this setting is necessary for what you want
store: (you need to put the grids store here),
sortable: false,
hideable: false,
menuDisabled: true,
dataIndex: "value_flag",
listeners: {
checkchange: function(column, rowIndex, checked){
//code for whatever on checkchange here
}
}
}
Trông như thế này: 
Oh, hãy chắc chắn để đổ checkcolumn cũ từ bạn bao gồm trên trang :) – Reimius
Vấn đề duy nhất với điều này là 'checkchange' không được kích hoạt khi bạn nhấp vào hộp kiểm trong tiêu đề. Có một giải pháp cho điều đó không? Nếu không thì đây chính xác là những gì tôi cần, cảm ơn !! – Jason
Tôi giả sử bạn muốn nó kích hoạt tất cả các hộp kiểm thay đổi khi trạng thái tiêu đề bị thay đổi? Tôi có thể cập nhật phiên bản này, nếu có, tôi sẽ thông báo cho bạn về những thay đổi. Điều này có thể ảnh hưởng tiêu cực đến mã của tôi ở đâu đó. – Reimius