Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Как использовать экземпляр Ext.data.Model в дереве? (https://javascript.ru/forum/extjs/60445-kak-ispolzovat-ehkzemplyar-ext-data-model-v-dereve.html)

Infarch 30.12.2015 14:11

Как использовать экземпляр Ext.data.Model в дереве?
 
Здравствуйте.

Возникла у меня одна идея, но для ее реализации понадобилось надругаться над трипанелью. Захотелось мне передать в виджет экземпляр обычной модели (не TreeModel!) и использовать его в качестве рута дерева. Для чего? Там будет форма редактирования, хочу чтоб изменения сразу отображались в дереве. Ну и чтоб прочие компоненты отображали изменения в модели.

Для начала попробовал решить "в лоб": https://fiddle.sencha.com/#fiddle/135p . Так не заработало. Если модель унаследовать от TreeModel то работает, но мне это кажется не совсем правильным с точки зрения архитектуры, ибо модель используется в куче других мест, где деревьев нет.

Подскажите, друзья, как лучше сделать? Забить на архитектуру и унаследоваться от ДеревоМодели? Или какое нибудь другое хитрое решение?

novikov 02.01.2016 10:24

Экспериментировал с чем-то похожим в 5-ой версии:
http://extjstricks.blogspot.ru/2015/04/tree-grid.html

Infarch 03.01.2016 12:53

Вы все равно используете TreeModel, пусть и не наследуетесь от нее явно. А меня интересовало можно ли использовать обычную модель. Но похоже что нельзя...

nohuhu 05.01.2016 02:29

Если посмотрите в исходник TreeModel, то увидите, что он почти пустой - фактически вся работа делается в class callback, который декорирует тело класса модели свойствами NodeInterface. Можете повторить в своём коде, создав обычную модель Foo и унаследовать от неё декорированную FooTree.

Или можно использовать mixin с набором полей и прочими свойствами, общими для обычной и деревянной моделей. Выглядеть всё равно будет малость кривовато и потребует разъяснений в коммментариях, так что я бы сделал а-ля TreeModel и не сильно заморачивался чистотой архитектуры.


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