Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   grid: Программное изменение ширины колонки (https://javascript.ru/forum/extjs/66582-grid-programmnoe-izmenenie-shiriny-kolonki.html)

khusamov 25.12.2016 04:30

grid: Программное изменение ширины колонки
 
Подглядев код http://docs.sencha.com/extjs/6.2.0/c...eaderResize r

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

Ext.grid.column.Column.setWidth()


нужно отменить свойство flex этой колонки.
А делается это при помощи следующего хака:

delete column.flex;


В документации об этом ни слова. Там вообще такого свойства как flex нет.

Вопрос:

Как обойтись без хака?


П.С. Изменение ширины мне потребовалось чтобы сделать синхронизацию внешнего вида двух таблиц (размеры колонок, расположение колонок, видимость колонок и прочее).

nohuhu 03.01.2017 22:03

Цитата:

Сообщение от khusamov (Сообщение 438870)
Вопрос:

Как обойтись без хака?

Ответ: использовать метод reconfigure, передавая ему массив с конфигурацией колонок, включающей фиксированную ширину.

khusamov 04.01.2017 17:23

Спасибо за ответ!
Не ясно как делать reconfigure.

Я сделал плагин columnSync, который подключаю к этим таблицам.

Но в таблицах колонки могут иметь очень сложные настройки (всякие actions, references, renderer связанные с контроллером вида, байдинги и прочее). Не говоря о колонках, которые генерируются динамически.

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

nohuhu 09.01.2017 23:42

Изначальный конфиг вытащить легко, он хранится на всех компонентах в свойстве initialConfig. Но это именно изначальный конфиг, использованный в момент создания компонента конструктором. Если какие-либо свойства изменялись впоследствии, то в initialConfig они, конечно, не попадут.

В вашем случае reconfigure может быть слишком накладно, поэтому лучше всё же менять ширину на существующих колонках. Вы их как изначально конфигурируете, с фиксированной шириной? Если её нет в конфиге, то ColumnLayout будет пытаться считать сам, и свойство flex служит ему индикатором, какие колонки считать, а какие нет.

khusamov 10.01.2017 13:52

flex слишком удобный способ задания ширины, от него сложно отказаться. Поэтому конечно некоторые колонки с flex

Так что я делаю вывод что придется удалять свойство flex перед изменением ширины. Тем более что это подсмотрено в исходниках extjs

nohuhu 12.01.2017 21:50

В таком случае хак скорее оправдан, чем нет. Я не вижу в нашем коде поддержку для таких случаев, когда колонки сперва определяют ширину динамически через flex, а потом внезапно становятся фиксированной ширины.

В таких случаях я обычно оставляю комментарий, чтобы потом ответить на закономерный WTF. :)

khusamov 13.01.2017 16:27

Цитата:

... не вижу в нашем коде поддержку для таких случаев, когда колонки сперва определяют ширину динамически через flex, а потом внезапно становятся фиксированной ширины
Так то оно так, конечно, но если создать грид с flex-колонками, а потом мышкой менять размеры колонок, то flex удаляется, а колонки становятся фиксированной ширины.

Это не удобно, ибо хотелось бы чтобы значение flex корректировалось (мышкой). Потом при изменения ширины таблицы появляется либо горизонтальная прокрутка либо пустое место справа - и все это из-за того, что ширины колонок фиксированные.

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

Спасибо за ответы!


Часовой пояс GMT +3, время: 06:33.