Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Использование ViewModel для грида (https://javascript.ru/forum/extjs/75789-ispolzovanie-viewmodel-dlya-grida.html)

Ambassador 06.11.2018 12:47

Использование ViewModel для грида
 
Добрый день.
Есть грид в котором выводятся записи из стора "ListViewStore". В "ListViewStore" в поле "contragent" хранится id значения.
Так же есть второй стор "ContrAgents" в котором хранятся эти id и другие соответствующие значения.
Для грида указываю в bind стор ListViewStore и соответственно в поле My Contragent выводится id . Мне нужно выводить name контрагента.
Если я правильно понимаю, то с версией extjs >=5, я могу во ViewModel в конфиге formulas установить событие при загрузке грида, в нем получать id поля "My Contragent" и потом получать и возвращать "name" из стора "ContrAgents". Так ли это?
Приведите пож-та пример как это можно реализовать.
Создал пример в fiddle

Swat2k 06.11.2018 16:06

То есть для отображения грида вам необходимо несколько сторов? Серьезно? В таком случае данные скорее всего придется выковыривать на этапе рендера ячейки (никакие ассоциативные связи тут не помогут и формулы тоже) - что приведет к катастрофической потере производительности.

PS: Да, во ViewModel действительно можно подписываться на события в store, но это не решает вашу проблему описанную мной выше.

Ambassador 06.11.2018 16:42

Думаю что не так все глобально.
У меня грид использует один стор, но в этом сторе хранится поле не с неймом, а значением id. Name по этому id хранится в другом сторе.
Как мне в гриде выводить Name?

Swat2k 06.11.2018 17:51

Пожалуйста, Fiddle . Но обычно данные для грида хранят в одном store (и даже не делают отношения между моделями) для ускорения его работы, особенно если грид сложен (например, locked grid с десятком колонок (template column, action columns и прочее), да ещё и с группировками)

Ambassador 07.11.2018 08:24

Цитата:

Сообщение от Swat2k (Сообщение 498028)
Пожалуйста, Fiddle . Но обычно данные для грида хранят в одном store (и даже не делают отношения между моделями) для ускорения его работы, особенно если грид сложен (например, locked grid с десятком колонок (template column, action columns и прочее), да ещё и с группировками)

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

siber-biber 07.11.2018 09:12

да вы делайте так как вам надо.. исходя из вашего проекта/целей.

если данные готовить на сервере, как товарищ выше написал, да код клиента упростится немного (не будет второго стора и рендерера на колонке).

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

далее, от извлечения поля из другого стора при обращение к записи по индексу вы не увидите "катастрофическую потерю производительности" как выше написано. :no:
выборка по индексу - быстрая операция. да и по дефолту грид использует buffered renderer, то есть отрисовывает только видимые записи (+буфер).

использование нескольких нормализованных сторов - нормальная практика в ext js.


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