Скрытие столбцов handsontable из javascript

Есть ли способ скрыть столбцы HOT от javascript? Требование таково, что столбец для скрытия будет отображаться как параметр в javascript, и на его основе соответствующий столбец будет отображаться соответствующим образом.

HOT имеет rowHeaders и colHeaders и данные с 20 столбцами.

Пожалуйста, порекомендуйте.


person James    schedule 02.01.2015    source источник
comment
Ух ты. Пожалуйста, проясните этот вопрос немного, очень мало смысла в том, с чем вы просите помощи. Может быть, дать нам jsfiddle.   -  person ZekeDroid    schedule 06.01.2015
comment
На самом деле у меня есть HOT с 10 столбцами. Теперь требование таково, что пользователь может захотеть видеть только 6 столбцов по своему выбору, а остальные он сможет скрыть. Таким образом, система должна иметь возможность скрывать эти 4 столбца на лету через javascript на HOT. Это требование может быть достигнуто в handsontable. Это то, что я ищу... Пожалуйста, посоветуйте.   -  person James    schedule 06.01.2015
comment
что происходит, когда он их прячет? как он их прячет? может ли он вернуть их? почему бы не удалить столбцы полностью из объекта данных?   -  person ZekeDroid    schedule 07.01.2015
comment
Невозможно полностью удалить его, потому что HOT.getData() должен иметь всю информацию о столбце (видимом или нет). Таким образом, скрытие столбца — это действие, которое я осматриваю. Пользователь может скрыть или показать столбцы по своему выбору.   -  person James    schedule 08.01.2015


Ответы (1)


УСТАРЕВШЕЕ РЕШЕНИЕ

Хорошо, я нашел возможное решение. Я проверил это на своей собственной системе, но на самом деле это довольно просто.

Вы должны использовать customRenderer в опции columns. Почитайте об этом, если вы еще этого не сделали. Идея состоит в том, что вы даете каждой ячейке свой собственный рендерер. В этой пользовательской функции вы можете сделать что-то вроде этого:

var colsToHide = [3,4,6]; // hide the fourth, fifth, and seventh columns

function getCustomRenderer() {
  return function(instance, td, row, col, prop, value, cellProperties) {
    if (colsToHide.indexOf(col) > -1) {
      td.hidden = true;
    } else {
      td.hidden = false;
    }
  }
}

Что делает этот рендерер, так это скрывает ячейки, указанные в переменной colsToHide. Все, что вам нужно сделать сейчас, это добавить элемент DOM, который позволяет пользователю выбирать, какой из них, и поэтому каждый раз, когда таблица отображается (что происходит в основном после любого изменения или при необходимости вручную), ячейки в указанных столбцах будут скрыты, сохраняя Массив data не поврежден, как вы описали. А когда не в colsToHide, они перерендериваются, так что убедитесь, что у вас это тоже работает.

Здесь я реализовал его с очень простой функциональностью. Просто введите индекс столбца в поля ввода и наблюдайте, как происходит волшебство.

http://jsfiddle.net/zekedroid/LkLkd405/2/

Лучшее решение: handsontable: скрыть некоторые столбцы без изменения массива/объекта данных

person ZekeDroid    schedule 12.01.2015
comment
Здесь есть улучшенная версия: столбцы без изменения объекта массива данных"> stackoverflow.com/questions/28793529/ - person alampada; 16.07.2015
comment
Правильно, я обновил его там, делаю это и здесь. Скрытие td не так хорошо, как метод обновления определения columns. - person ZekeDroid; 16.07.2015
comment
у меня есть таблица, в которой для заголовков и свойства stretchall установлено значение true. Я скрываю определенный столбец с помощью функции рендеринга, но в любом случае можно скрыть заголовок столбца, не занимая места - person Richie Fredicson; 29.09.2015
comment
Это тяжело, я вам скажу. И грязный. Я бы определенно использовал новый метод, а не метод рендерера. - person ZekeDroid; 29.09.2015
comment
здесь stackoverflow.com/questions/28793529/ находятся в разделе "Новая техника" - person ZekeDroid; 29.09.2015
comment
Проблема с этим методом заключается в том, что вы фактически меняете источник данных, и если вы захотите использовать, например, метод setData, он изменит данные не в том месте. В вашем примере вы можете скрыть столбец с индексом 3, а затем при установке значения для того же индекса он обновит столбец с источником данных с индексом 4. Пример здесь - person Alvaro; 27.01.2016
comment
Это не меняет источник данных, не знаю, на что вы ссылаетесь. Но да, это устаревшее решение, как показывают комментарии. Я перенаправлю в ответ, чтобы избежать дальнейшей путаницы. - person ZekeDroid; 27.01.2016
comment
Это не будет работать с таблицей, использующей заголовки: jsfiddle.net/LkLkd405/101 - person Alvaro; 29.01.2016
comment
@ZekeDroid извините, предыдущий комментарий два дня назад был для вашего другого предлагаемое решение. Но я не заметил, что должен использовать setDataAtRowProp вместо setDataAtCell. - person Alvaro; 29.01.2016