Установите максимальную ширину и максимальную высоту для ячеек таблицы

Можно ли установить max-width а также max-height для клеток в Handsontable?

Я пытался установить это с помощью CSS на <th> а также <td> элементы, но это не работает.

Я видел в документах, что вы можете установить столбцы определенной ширины, но не максимумы.

1 ответ

Таким образом, решение состоит в том, чтобы использовать ваши горячие экземпляры manualColumnWidths массив. Этот массив автоматически устанавливает ширину всех столбцов. Он вложен где-то в код, так что в любое время происходит изменение в DOM, которое он обновляет, поэтому использование CSS или jQuery для ширины самих элементов не работает. Это хорошая структура, нам просто нужно, чтобы это было где-то более четко написано.

Обратите внимание, что вы можете повторить это для rows просто используя manualRowHeights вместо этого, как и остальные row методы.

Теперь, вот как вы должны установить максимумы и минимумы для событий изменения размера столбцов. Установить afterColumnResize вариант этой следующей функции:

function setAfterColumnResize() {
  return function(col, size) {

    var headers = $(".colHeader"); // first is empty if there are rowHeaders
    var maxW = [10, 200, 400]; // note that the first is the row header
    var minW = [1, 100, 100]; // note that the first is the row header

    var actualCol = col + 1; // this is to account for the row header

    var maxColW = maxW[actualCol];
    var minColW = minW[actualCol];
    var actualW = $(headers[actualCol]).parent().parent().width();

    if (hot && maxColW && actualW > maxColW) {
      hot.manualColumnWidths[col] = maxColW;
      hot.render()
    }

    if (hot && minColW && actualW < minColW) {
      hot.manualColumnWidths[col] = minColW;
      hot.render()
    }
  }
}

Теперь позвольте мне объяснить это. Когда это событие запускается, вы сначала находите заголовок, используя col Индекс это дает вам. Исправьте это, если у вас установлены заголовки строк true (что я и делаю здесь и на скрипке). Затем вы устанавливаете массивы максимальной / минимальной ширины (конечно, вы можете сделать это более элегантно в своем коде).

Затем возьмите текущую текущую ширину рассматриваемого столбца, посмотрев на родительский элемент родительского диапазона (это немного грязно, но это самый простой способ, который я нашел). Условный после должен быть самоочевидным.

И, наконец, важные биты. Вы можете увидеть это, зайдя hot.manualColumnWidths Вы можете установить желаемую ширину. Я установил его на максимум, если моя текущая ширина превышает его. Тогда просто перерисовать и все готово!

Есть несколько проблем, например, тот факт, что эти события вызываются только после изменения размера, поэтому, если вы изначально настроили отображение таблицы с шириной, превышающей максимальную, она ничего не сделает. Если это так, просто вызовите эту функцию после рендеринга таблицы в первый раз (вызывайте ее один раз для каждого столбца).

Это также будет иметь место, если вы не хотите использовать событие изменения размера столбца; в этом случае это будет обычная функция, которую вы вызываете после рендеринга.

Надеюсь это поможет! Вот демонстрационная скрипка, показывающая это в действии:D

Другие вопросы по тегам