发布问题后ExtJS checkcolumn grid - check columns to left, uncheck columns to right并认为存在“全选”选项的现有问题和答案,我阅读得更深入一些,但它们实际上并未涵盖与我的其他问题答案相关的我需要的内容。
我需要知道在每个列标题中生成复选框所需的代码,该复选框在选择/取消时会更改给定列中的复选框。
现有代码供引用:
Ext.Loader.setConfig({
enabled: true
});
Ext.Loader.setPath('Ext.ux', '../ux');
Ext.require([
'Ext.ux.CheckColumn'
]);
Ext.onReady(function(){
Ext.define('ProcessModel', {
extend: 'Ext.data.Model',
fields: [
'Item',
'Phase1',
'Phase2',
'Phase3',
'Phase4',
'Phase5',
'Phase6',
'Phase7',
'Phase8',
'Phase9',
'Phase10'
]
});
// create the Data Store
var processStore = Ext.create('Ext.data.Store', {
model: 'processModel',
autoLoad: true,
proxy: {
// load using HTTP
type: 'ajax',
url: '<?= $site_url ?>/Production/Processes/<?= $itemId ?>',
reader: {
type: 'json',
model: 'ProcessModel',
root: data
}
}
});
function onCheckChange (column, rowIndex, checked, eOpts) {
var record = processStore.getAt(rowIndex);
var columnIndex = column.getIndex();
for (var i = 1; i <= 10; i++) {
if(checked) {
if (i <= columnIndex) {
record.set('Phase'+i, true);
}
else
{
record.set('Phase'+i, false);
}
}
else {
if (i >= columnIndex) {
record.set('Phase'+i, false);
}
}
}
}
Ext.create('Ext.grid.Panel', {
width: 800,
store: processStore,
title: 'Processes',
tbar: [
{
xtype: 'button',
text: 'Update',
handler: function(){
//TODO: update by POST function
}
}
],
columns: [
{
text: 'Item',
dataIndex: 'Item'
},{
xtype: 'checkcolumn',
text: 'Phase 1',
dataIndex:'Phase1',
listeners: {
checkChange: onCheckChange
}
},{
xtype: 'checkcolumn',
text: 'Phase 2',
dataIndex:'Phase2',
listeners: {
checkChange: onCheckChange
}
},{
xtype: 'checkcolumn',
text: 'Phase 3',
dataIndex:'Phase3',
listeners: {
checkChange: onCheckChange
}
},{
xtype: 'checkcolumn',
text: 'Phase 4',
dataIndex:'Phase4',
listeners: {
checkChange: onCheckChange
}
},{
xtype: 'checkcolumn',
text: 'Phase 5',
dataIndex:'Phase5',
listeners: {
checkChange: onCheckChange
}
},{
xtype: 'checkcolumn',,
listeners: {
checkChange: onCheckChange
}
text: 'Phase 6',
dataIndex:'Phase6',
listeners: {
checkChange: onCheckChange
}
},{
xtype: 'checkcolumn',
text: 'Phase 7',
dataIndex:'Phase7',
listeners: {
checkChange: onCheckChange
}
},{
xtype: 'checkcolumn',
text: 'Phase 8',
dataIndex:'Phase8',
listeners: {
checkChange: onCheckChange
}
},{
xtype: 'checkcolumn',
text: 'Phase 9',
dataIndex:'Phase9',
listeners: {
checkChange: onCheckChange
}
},{
xtype: 'checkcolumn',
text: 'Phase 10',
dataIndex:'Phase10',
listeners: {
checkChange: onCheckChange
}
}
],
renderTo: Ext.get('sencha_processes')
});
});
想象伪代码来处理全选功能,以获得我正在寻找的那种效果:
function selectAllInColumn (column, checked, eopts){
var columnIndex = column.getIndex();
for( var i = 0; i < processStore.getCount(); i++)
{
if(checked)
{
var record = processStore.getAt(i);
for(var j = 1; j <= columnIndex; j++) {
record.set('Phase'+columnIndex, true);
}
for(var j = columnIndex+1; j <= 10; j++) {
record.set('Phase'+columnIndex, false);
}
}
else
{
var record = processStore.getAt(i);
for(var j = columnIndex; j <= 10; j++) {
record.set('Phase'+columnIndex, false);
}
}
}
}
最佳答案
您可以看一下我在每个列标题中生成复选框的变体。检查checkcolumn with select all与描述或只是 fiddle举例说明。
我的检查栏:
Ext.define('Fiddle.CheckColumn', {
extend: 'Ext.grid.column.CheckColumn',
alias: 'widget.fiddlecheckcolumn',
renderTpl: [
'<div id="{id}-titleEl" data-ref="titleEl" {tipMarkup}class="', Ext.baseCSSPrefix, 'column-header-inner<tpl if="!$comp.isContainer"> ', Ext.baseCSSPrefix, 'leaf-column-header</tpl>',
'<tpl if="empty"> ', Ext.baseCSSPrefix, 'column-header-inner-empty</tpl>">',
'<span class="', Ext.baseCSSPrefix, 'column-header-text-container">',
'<span class="', Ext.baseCSSPrefix, 'column-header-text-wrapper">',
'<span id="{id}-textEl" data-ref="textEl" class="', Ext.baseCSSPrefix, 'column-header-text',
'{childElCls}">',
'<img class="', Ext.baseCSSPrefix, 'grid-checkcolumn" src="' + Ext.BLANK_IMAGE_URL + '"/>',
'</span>',
'</span>',
'</span>',
'<tpl if="!menuDisabled">',
'<div id="{id}-triggerEl" data-ref="triggerEl" role="presentation" class="', Ext.baseCSSPrefix, 'column-header-trigger',
'{childElCls}" style="{triggerStyle}"></div>',
'</tpl>',
'</div>',
'{%this.renderContainer(out,values)%}'
],
constructor : function(config) {
var me = this;
Ext.apply(config, {
stopSelection: true,
sortable: false,
draggable: false,
resizable: false,
menuDisabled: true,
hideable: false,
tdCls: 'no-tip',
defaultRenderer: me.defaultRenderer,
checked: false
});
me.callParent([ config ]);
me.on('headerclick', me.onHeaderClick);
me.on('selectall', me.onSelectAll);
},
onHeaderClick: function(headerCt, header, e, el) {
var me = this,
grid = headerCt.grid;
if (!me.checked) {
me.fireEvent('selectall', grid.getStore(), header, true);
header.getEl().down('img').addCls(Ext.baseCSSPrefix + 'grid-checkcolumn-checked');
me.checked = true;
} else {
me.fireEvent('selectall', grid.getStore(), header, false);
header.getEl().down('img').removeCls(Ext.baseCSSPrefix + 'grid-checkcolumn-checked');
me.checked = false;
}
},
onSelectAll: function(store, column, checked) {
var dataIndex = column.dataIndex;
for(var i = 0; i < store.getCount(); i++) {
var record = store.getAt(i);
if (checked) {
record.set(dataIndex, true);
} else {
record.set(dataIndex, false);
}
}
}
});
关于extjs - 检查列全选;标题操作,选择所有功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21310848/