У меня есть пример изменения цвета, который уже происходит. Проблема в том, что изменение цвета новой ячейки, строки или столбца изменит цвет предыдущей ячейки/строки/столбца. Предыдущая ячейка должна сохранять исходный цвет, и мне нужно, чтобы это происходило динамически с одной функцией (а не с несколькими визуализаторами). В скрипке есть 3 варианта цвета, но на самом деле я использую подборщик цветов с сотнями опций. Как я могу справиться с этим изменением цвета на лету (щелкните правой кнопкой мыши)?Совместимые цвета смены ячеек/строк/столбцов с выбором цвета?
http://jsfiddle.net/anschwem/hkhk5zbo/17/
var data = [
['', 'Maserati', 'Mazda', 'Mercedes', 'Mini', 'Mitsubishi'],
['2009', 0, 2941, 4303, 354, 5814],
['2010', 3, 2905, 2867, 412, 5284],
['2011', 4, 2517, 4822, 552, 6127],
['2012', 2, 2422, 5399, 776, 4151]
],
celldata = [],
container = document.getElementById('example'),
hot,
sentrow,
sentcol;
var colorRenderer = function (instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.TextRenderer.apply(this, arguments);
td.style.backgroundColor = $('#color_field').val();
};
var settings = {
data: data,
minSpareRows: 1,
rowHeaders: true,
colHeaders: true,
contextMenu: true,
startRows: 5,
startCols: 5,
//columns: coldata,
cell: celldata,
cells: function (row, col, prop) {
if (row === sentrow) {
this.renderer = colorRenderer;
}
if (col === sentcol) {
this.renderer = colorRenderer;
}
},
};
hot = new Handsontable(example, settings);
hot.updateSettings({
contextMenu: {
callback: function (key, options) {
if (key === 'cellcolor') {
setTimeout(function() {
//timeout is used to make sure the menu collapsed before alert is shown
var row = hot.getSelected()[0];
var col = hot.getSelected()[1];
var item = {};
item.row = row;
item.col = col;
item.renderer = colorRenderer
celldata.push(item)
hot.updateSettings({cell: celldata});
hot.render();
}, 100);
}
if (key === 'rowcolor') {
setTimeout(function() {
//timeout is used to make sure the menu collapsed before alert is shown
var row = hot.getSelected()[0];
sentrow = row;
hot.render();
}, 100);
}
if (key === 'colcolor') {
setTimeout(function() {
//timeout is used to make sure the menu collapsed before alert is shown
var col = hot.getSelected()[1];
sentcol = col;
hot.render();
}, 100);
}
},
items: {
"cellcolor": {
name: 'Cell color'
},
"rowcolor": {
name: 'Row color'
},
"colcolor": {
name: 'Column color'
},
}
}
})
Это прекрасно работает, но так как я использую палитру цветов Я хранение цвета вне функции. http://jsfiddle.net/anschwem/0h6yqzw7/23/ – triplethreat77
Обновлен JSFiddle, чтобы отразить это. Вы все равно можете зафиксировать значение выбранного цвета в закрытии, присвоив значение storedColor colorValue. – McCroskey
Я работаю над этим, и независимо от того, какой предыдущий цвет изменится (хотя он отлично работает в вашем примере) - супер разочаровывает. Это довольно странно, и я не уверен. Вот что я работаю как альтернативный (http://jsfiddle.net/anschwem/9odsv02x/1/), и ядро работает. Строки (на моем конце) заменят предыдущий цвет строки, и я не уверен, почему у меня есть длина - 1, но в остальном он добавляет дополнительный столбец. Может быть, это i <= settings.startCols? – triplethreat77