При использовании Handsontable кажется трудно получить заголовок строки из контекстного меню.
Рассмотрим следующий источник данных:
var data = function () {
return [["1212", "roman", "i", "ii", "iii"],
["3121", "numeric", 1, 2 ,3],
["4126", "alpha", 'a', 'b', 'c']];
};
Можно создать экземпляр Handsontable, который отображает все данные, но первые два "столбца", и имеет контекстное меню:
// Settings to display all columns but the first two
var dataCols = []
for(var i=2; i<data()[0].length; i++) {
dataCols.push({ data: i })
}
// Instance creation
var hot = new Handsontable(container, {
data: data(),
height: 396,
colHeaders: true,
rowHeaders: false,
columns: dataCols,
stretchH: 'all',
columnSorting: true,
contextMenu: {
callback: function(key, options) {
switch(key) {
case 'header_pls':
// TODO retrieve the "hidden header" from here
break;
}
},
items: {
"header_pls": {
name: "Header please?"
}
}
},
});
Параметр options
из обратного вызова контекстного меню состоит из двух объектов start
и end
, имеющих свойства row
и col
.
Пусть это будет просто и предположим, что всегда будет выбрана одна ячейка: start
и end
- это один и тот же объект.
Затем можно получить заголовок из источника данных (а не данные, привязанные к экземпляру), используя метод Handsontable getSourceDataAtRow
.
Это может сделать трюк, но когда таблица была отсортирована, щелкнув заголовок столбца, номер строки из источника данных и данные, привязанные к экземпляру, уже не совпадают.
Вот пример, который показывает, в чем проблема.
Невозможно получить один из двух первых элементов строки после сортировки таблицы.
Пропустил ли я что-нибудь?