25.12.2016, 04:30
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
grid: Программное изменение ширины колонки
Подглядев код http://docs.sencha.com/extjs/6.2.0/c...eaderResize r
я узнал, чтобы изменить ширину колонки недостаточно вызова метода
Ext.grid.column.Column.setWidth()
нужно отменить свойство flex этой колонки.
А делается это при помощи следующего хака:
delete column.flex;
В документации об этом ни слова. Там вообще такого свойства как flex нет.
Вопрос:
Как обойтись без хака?
П.С. Изменение ширины мне потребовалось чтобы сделать синхронизацию внешнего вида двух таблиц (размеры колонок, расположение колонок, видимость колонок и прочее).
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
03.01.2017, 22:03
|
|
Профессор
|
|
Регистрация: 21.05.2015
Сообщений: 321
|
|
Сообщение от khusamov
|
Вопрос:
Как обойтись без хака?
|
Ответ: использовать метод reconfigure, передавая ему массив с конфигурацией колонок, включающей фиксированную ширину.
|
|
04.01.2017, 17:23
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Спасибо за ответ!
Не ясно как делать reconfigure.
Я сделал плагин columnSync, который подключаю к этим таблицам.
Но в таблицах колонки могут иметь очень сложные настройки (всякие actions, references, renderer связанные с контроллером вида, байдинги и прочее). Не говоря о колонках, которые генерируются динамически.
В итоге, как на основе имеющейся таблицы вытащить исходные конфиги колонок, да так чтобы все это хозяйство не порушилось, ума не приложу.
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
09.01.2017, 23:42
|
|
Профессор
|
|
Регистрация: 21.05.2015
Сообщений: 321
|
|
Изначальный конфиг вытащить легко, он хранится на всех компонентах в свойстве initialConfig. Но это именно изначальный конфиг, использованный в момент создания компонента конструктором. Если какие-либо свойства изменялись впоследствии, то в initialConfig они, конечно, не попадут.
В вашем случае reconfigure может быть слишком накладно, поэтому лучше всё же менять ширину на существующих колонках. Вы их как изначально конфигурируете, с фиксированной шириной? Если её нет в конфиге, то ColumnLayout будет пытаться считать сам, и свойство flex служит ему индикатором, какие колонки считать, а какие нет.
|
|
10.01.2017, 13:52
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
flex слишком удобный способ задания ширины, от него сложно отказаться. Поэтому конечно некоторые колонки с flex
Так что я делаю вывод что придется удалять свойство flex перед изменением ширины. Тем более что это подсмотрено в исходниках extjs
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
12.01.2017, 21:50
|
|
Профессор
|
|
Регистрация: 21.05.2015
Сообщений: 321
|
|
В таком случае хак скорее оправдан, чем нет. Я не вижу в нашем коде поддержку для таких случаев, когда колонки сперва определяют ширину динамически через flex, а потом внезапно становятся фиксированной ширины.
В таких случаях я обычно оставляю комментарий, чтобы потом ответить на закономерный WTF. :)
|
|
13.01.2017, 16:27
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Цитата:
|
... не вижу в нашем коде поддержку для таких случаев, когда колонки сперва определяют ширину динамически через flex, а потом внезапно становятся фиксированной ширины
|
Так то оно так, конечно, но если создать грид с flex-колонками, а потом мышкой менять размеры колонок, то flex удаляется, а колонки становятся фиксированной ширины.
Это не удобно, ибо хотелось бы чтобы значение flex корректировалось (мышкой). Потом при изменения ширины таблицы появляется либо горизонтальная прокрутка либо пустое место справа - и все это из-за того, что ширины колонок фиксированные.
В итоге в коде сенчи собственно хак и используется. Которым придется воспользоваться.
Спасибо за ответы!
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
|
|