2015-07-22 2 views
0

Я хочу объединить значения из удобной сетки. Итак, я нашел что-то на jsfiddle, и я пытаюсь адаптировать его в моем случае.
Вот ссылка:Расчет в режиме handsontable

http://jsfiddle.net/9onuhpn7/4/

Поэтому у меня есть 3 колонки A, B, C, и я пытаюсь объединить их и отобразить результат в колонке «SUM», но это не работает.

Как я уже сказал, это код, который я взял у другого парня, и я не понимаю эту строку if (changes[i][1] === 3) {, и если я ее отниму, это больше не работает. Если кто-то может сказать мне, в чем цель этого.

Кто-то может мне помочь?

+0

Насколько я могу судить (я не являюсь потенциальным экспертом), эта строка имеет двойную функцию: она не выполняется, если отредактирован третий столбец (изменения [i] = [строка, столбец, значение oldvalue, newvalue ], поэтому изменения [i] [1] содержат измененный столбец), а также гарантирует, что изменения не являются рекурсивными, потому что 'hot.setDataAtCell (0, 3, value, 'changed');', похоже, также запускает обмен , –

+0

@ Me.Name Итак, расчет будет происходить только при изменении второй ячейки? – Erlaunis

+0

Не совсем, это произойдет, если информация о смене ячейки не является третьим столбцом индекса, поэтому в этом случае это произойдет для столбцов с индексами 0,1 и 2. Обратите внимание, что, поскольку 'beforeChange' используется в комбинации с live 'getDataAtCell', значения для суммы всегда будут версией позади. Проделайте какую-нибудь работу: что-то вроде этого: http://jsfiddle.net/9onuhpn7/7/ будет работать, если столбец суммы - последний столбец –

ответ

2

Код, который вы сделали, немного странный. Я обновил его немного, чтобы лучше подойти к тому, что вы ищете.

(PS: Я не Handsontable пользователя)

В принципе, проблема, кажется, что вы слушаете событие изменения, и в этом случае изменения, вы делаете некоторые изменения. Это может привести к бесконечному циклу событий.

Линия

if(changes[i][1] === 3) 

только здесь, чтобы предотвратить эту петлю. В принципе, если изменение произошло в ячейке SUM, которая находится в координатах [i, 1], то мы не хотим снова запускать изменение (как это только что произошло).

Посмотрите на этот код: http://jsfiddle.net/9onuhpn7/6/

При вызове setDataAtCell(), вы можете связать имя изменения. Это имя будет вторым параметром слушателя afterChange.

Вам просто нужно использовать условие для имени источника события для его запуска или нет.

+0

Это именно то, что я хотел, большое спасибо :) – Erlaunis

+0

Я также позволил изменить событие «beforeChange» на «afterChange». Кажется более естественным, если обновление выполняется сразу после завершения редактирования ячейки. – noKid

+0

Вы правы, спасибо! – Erlaunis