Dav*_*son 2 checkbox grid extjs extjs4.2
在发布问题ExtJS checkcolumn网格后 - 检查左边的列,取消选中右边的列,并认为现有问题和答案为"全选"选项,我读得更深一点,他们实际上并没有涵盖我需要的内容关于我的另一个问题的答案.
我需要知道在每个列标题中生成一个复选框需要什么代码,当选择/取消选择时,会更改给定列中的复选框.
现有代码供参考:
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')
});
});
Run Code Online (Sandbox Code Playgroud)
设想的伪代码来处理选择所有函数,对于我正在寻找的那种效果:
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以查看我在每个列标题中生成复选框的变体.检查checkcolumn,选择all with the discription或只是摆弄示例.
我的支票栏:
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);
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6187 次 |
| 最近记录: |