【发布时间】:2015-05-19 03:52:26
【问题描述】:
我正在尝试使用spreadsheet model 选择多个单元格,但看起来没有一种方法可以选择单个单元格或一组不是范围的单元格。 (我也尝试了 cellmodel,但它看起来也不起作用。)我知道 selectCells 存在,但就像我说的,我可能会选择一堆不在一个范围内的单元格。这是一个例子(和Fiddle):
Ext.application({
name: 'Fiddle',
launch: function() {
var store = Ext.create('Ext.data.Store', {
fields: ['time', 'days'],
proxy: {
type: 'memory'
},
data: [{
time: 800,
days: [{
day: 'Monday',
nameId: 1,
name: 'Mulder'
}, {
day: 'Tuesday',
nameId: 1,
name: 'Mulder'
}, {
day: 'Wednesday',
nameId: 2,
name: 'Scully'
}, {
day: 'Thursday'
}, {
day: 'Friday',
nameId: 2,
name: 'Scully'
}, {
day: 'Saturday',
nameId: 3,
name: 'Skinner'
}, {
day: 'Sunday',
nameId: 2,
name: 'Scully'
}]
}]
});
var renderFn = function(value, metaData, record, rowIdx, colIdx, store, view) {
var days = record.get('days');
if (days) {
var column = days[colIdx - 2];
if (column && column.nameId !== undefined) {
metaData.tdCls = 'my-attr-' + (column.nameId % 10);
}
}
return;
};
var onSelectionChange = function(grid, selection, eOpts) {
var store = grid.getStore();
if (selection && selection.startCell) {
var colIdx = selection.startCell.colIdx;
var days = selection.startCell.record.get('days');
if (days && store) {
var day = days[colIdx - 2];
var selectionModel = this.getSelectionModel();
if (day && selectionModel) {
nameId = day.nameId;
if (nameId !== undefined) {
var items = [];
store.each(function(rec, rowIdx) {
var recDays = rec.get('days');
if (recDays) {
for (var i = 0; i < recDays.length; i++) {
var rec = recDays[i];
if (rec && rec.nameId === nameId) {
items.push([rowIdx, i + 2]);
}
}
}
}, this);
console.log(items);
// selectionModel.select(items);
}
}
}
}
};
/*var onSelectionChangeGrid = function(selModel, record, rowIdx, colIdx, eOpts) {
var days = record.get('days');
var store = this.getStore();
console.log(days, store);
if (days && store) {
var day = days[colIdx - 2];
var selectionModel = this.getSelectionModel();
if (day && selectionModel) {
nameId = day.nameId;
if (nameId !== undefined) {
var items = [];
store.each(function(rec) {
var recDays = rec.get('days');
if (recDays) {
for (var i = 0; i < recDays.length; i++) {
var rec = recDays[i];
if (rec && rec.nameId === nameId) {
items.push(rec);
}
}
}
}, this);
console.log(items);
selectionModel.select(items);
}
}
}
};*/
var grid = Ext.create('Ext.grid.Panel', {
store: store,
forceFit: true,
selModel: {
selType: 'spreadsheet',
mode: 'multi'
},
columns: [{
text: 'Time',
dataIndex: 'time'
}, {
text: 'Monday',
dataIndex: 'days',
renderer: renderFn
}, {
text: 'Tuesday',
dataIndex: 'days',
renderer: renderFn
}, {
text: 'Wednesday',
dataIndex: 'days',
renderer: renderFn
}, {
text: 'Thursday',
dataIndex: 'days',
renderer: renderFn
}, {
text: 'Friday',
dataIndex: 'days',
renderer: renderFn
}, {
text: 'Saturday',
dataIndex: 'days',
renderer: renderFn
}, {
text: 'Sunday',
dataIndex: 'days',
renderer: renderFn
}],
renderTo: Ext.getBody()
});
grid.on('selectionchange', onSelectionChange, grid);
}
});
我想要发生的是,当我选择第一个黄色单元格时,它会选择另一个黄色单元格,如果我选择一个黑色单元格,它会选择其他黑色单元格。在我的代码中,我有一个数组数组,其中包含相同颜色的每个单元格的 rowIdx 和 colIdx,但我不知道如何使用这些信息,因为没有可用的方法。
我已经开始在代码中挖掘以了解它们是如何进行范围选择的,但它看起来像是发生了行和单元格选择的组合。即使根据 API 将模式设置为 multi...,我也不能使用“ctrl”来选择多个单元格:
“MULTI” - 允许使用 Ctrl 和 Shift 键复杂地选择多个项目。
有人对如何开始有任何想法或指导吗?
【问题讨论】: