2015-10-30 3 views
1

Можно ли принудительно обновить только один td (cell) для просмотра? Существует способ hot.render(), но он ретранслирует все ячейки.Обновить конкретную ячейку в Handsontable

Я хочу обновить содержимое таблицы JSON (hot.getData()) с помощью ajax, но я не могу найти, как заставить визуализировать таблицу. Моя таблица настолько огромна, что каждый раз я получаю данные.

Е.Г.,

$.ajax(url,... ,success: function(d){ 
var data = hot.getData(); 
data[parseInt(d['row'],10)][d['col']] = d['value']; 
hot.render();//please, change this function into more simple. 
}, 
... 
); 

возможно обновить TD-клетки в [row,col]?

ответ

2

Повторный рендеринг всего стола - это единственный способ, которым Handsontable позволит вам визуализировать, и он существует по нескольким веским причинам. Во-первых, неважно, насколько велика ваша таблица, поскольку используется виртуальный рендеринг. Это означает, что он будет отображать только то, что вы видите, плюс еще несколько строк. Даже если бы у вас были триллионы строк и столбцов, это все равно просто показало бы достаточно, чтобы вы подумали, что он полностью отображен. Это не интенсивная задача, предполагающая, что вы не делаете что-то напуганное с помощью специального рендеринга.

Другая причина, по которой это делает все с нуля, заключается в том, что это способ Handsontable хранить объект DOM без гражданства. Если вы вручную начали рендеринг определенных ячеек, вы могли бы получить таблицу, не соответствующую синхронизации. И опять же, поскольку виртуальный рендеринг ограничивает то, что получает рендеринг, нет проблемы с производительностью, связанной с полным повторным рендерингом.

3

Я согласен, что полная рендеринг сетки хороша, однако есть один недостаток. Когда мы визуализируем всю сетку, она будет прокручиваться назад до строки 1, она не сохранит последнее представление, которое мы имеем перед render.E.g. Я нахожусь в строке номер 100, как только я нарисую сетку, вернусь к строке номер 1, теперь пользователь должен снова вернуться к номеру строки 100, что разочаровывает.

Любое решение этой проблемы.

Я нашел, что мы могли бы использовать hot.selectCell (100,1), чтобы вернуться к ряду сотен, однако как я могу сохранить, что мы были в строке номер 100 программно, так что я мог бы установить его обратно в эту строку.

Я сделал один заказRendering, чтобы изменить значение Grid, используя приведенный ниже код, однако он имеет некоторые проблемы с производительностью, когда у нас есть большое количество строк для изменения.

//Below code will render one row ,similarly apply the loop to modify multiple row. 

data.Records[i].Values.forEach(function(value, ix) { 
hot.setDataAtCell(i, ix, value); 
//i is row number , ix is the column number , v is the new value. 
} 

Однако hot.setDataAtCell (я, IX, v) является дорогостоящим, поэтому если у вас есть большое количество подряд, то он попадет в пользу performance.However это он будет делать пользовательские (одиночный/mulitiple) рендеринг ячеек/строк без прокрутки сетки и сохранения пользовательского вида.

P.S. вместо hot.setDataAtCell вы можете использовать setDataAtRowProp для установки значения для строки, однако я не пробовал.

Смежные вопросы