Просмотр полной версии : Использование ViewModel для грида
Ambassador
06.11.2018, 12:47
Добрый день.
Есть грид в котором выводятся записи из стора "ListViewStore". В "ListViewStore" в поле "contragent" хранится id значения.
Так же есть второй стор "ContrAgents" в котором хранятся эти id и другие соответствующие значения.
Для грида указываю в bind стор ListViewStore и соответственно в поле My Contragent выводится id . Мне нужно выводить name контрагента.
Если я правильно понимаю, то с версией extjs >=5, я могу во ViewModel в конфиге formulas установить событие при загрузке грида, в нем получать id поля "My Contragent" и потом получать и возвращать "name" из стора "ContrAgents". Так ли это?
Приведите пож-та пример как это можно реализовать.
Создал пример в fiddle (https://fiddle.sencha.com/#view/editor&fiddle/2mr1)
То есть для отображения грида вам необходимо несколько сторов? Серьезно? В таком случае данные скорее всего придется выковыривать на этапе рендера ячейки (никакие ассоциативные связи тут не помогут и формулы тоже) - что приведет к катастрофической потере производительности.
PS: Да, во ViewModel действительно можно подписываться на события в store, но это не решает вашу проблему описанную мной выше.
Ambassador
06.11.2018, 16:42
Думаю что не так все глобально.
У меня грид использует один стор, но в этом сторе хранится поле не с неймом, а значением id. Name по этому id хранится в другом сторе.
Как мне в гриде выводить Name?
Пожалуйста, Fiddle (https://fiddle.sencha.com/#view/editor&fiddle/2nc3) . Но обычно данные для грида хранят в одном store (и даже не делают отношения между моделями) для ускорения его работы, особенно если грид сложен (например, locked grid с десятком колонок (template column, action columns и прочее), да ещё и с группировками)
Ambassador
07.11.2018, 08:24
Пожалуйста, Fiddle (https://fiddle.sencha.com/#view/editor&fiddle/2nc3) . Но обычно данные для грида хранят в одном store (и даже не делают отношения между моделями) для ускорения его работы, особенно если грид сложен (например, locked grid с десятком колонок (template column, action columns и прочее), да ещё и с группировками)
Т.е лучше всего подготавливать необходимую структуру данных на стороне бекенда? И в идеале один грид - это один стор со всеми необходимыми значениями полей?
siber-biber
07.11.2018, 09:12
да вы делайте так как вам надо.. исходя из вашего проекта/целей.
если данные готовить на сервере, как товарищ выше написал, да код клиента упростится немного (не будет второго стора и рендерера на колонке).
но и минусы у такого подхода тоже есть ..например при изменении стора контрагентов на клиенте вы не сможете на лету обновить грид без запроса к серверу. то есть приложение потеряет в динамике. а насколько это критично в вашем случае смотрите сами.
далее, от извлечения поля из другого стора при обращение к записи по индексу вы не увидите "катастрофическую потерю производительности" как выше написано. :no:
выборка по индексу - быстрая операция. да и по дефолту грид использует buffered renderer, то есть отрисовывает только видимые записи (+буфер).
использование нескольких нормализованных сторов - нормальная практика в ext js.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot