Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Как передать данные в другую панель из выбранной строки таблицы. layout: 'card'. (https://javascript.ru/forum/extjs/56154-kak-peredat-dannye-v-druguyu-panel-iz-vybrannojj-stroki-tablicy-layout-%27card%27.html)

Пролетарий 01.06.2015 21:47

Как передать данные в другую панель из выбранной строки таблицы. layout: 'card'.
 
Всем привет.

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

У меня есть панель со свойством layout: 'card', т.е. одновременно может показываться только один её итем. Каждый из итемов это или таблица или панель с чем-то ещё и таблицей. Как добавлять, удалять и загружать данные в таблицу разобрался, но в одной из них у меня очень много данных.

Получается, у меня есть таблица, при двойном клике на которую, вместо таблицы должна появится панель для редактирования в том же самом месте, т.к. у меня layout: 'card' то я хочу добавить итем с формой для редактирования в общий список, но как передать в эту форму данные из выбранной строки не знаю. Как это можно сделать? Или это может как-то по другому делают?

В связи с чем есть ещё вопрос по организации модели. У меня есть некоторые данные, которые состоят из 20 полей, но в таблице нужно вывести скажем 5 из них, остальные не надо. Мне нужно создавать две модели или одну? Т.е. одна модель из 5 полей для таблицы, а другая из 20 полей для редактирования. Или надо создать одну модель из 20 полей, которую использовать и для таблицы и для редактирования?

Вот и получается, что при двойном клике в одной из строк таблицы с 5 полями, надо вместо неё вывести панель с полями для редактирования всех 20 полей этих данных. Опять же в эти 20 полей должны данные поступать из того что есть в модели на клиенте или надо их загрузить с сервера для этого конкретного объекта?

AirGraph 02.06.2015 01:19

1. Таблицу поместил бы в gridpanel. Слушал бы событие itemdblclick. В хандлере этого события есть параметр record - это Ваши данные.

http://docs.sencha.com/extjs/5.1/5.1...t-itemdblclick

2. Вовсе не обязательно выводить в grid все поля, которые описаны в модели. Просто в конфиге store укажите модель, а в columns - опишите только те колонки, которые хотите видеть в grid (dataIndex Вам в помощь).

http://docs.sencha.com/extjs/5.1/5.1...el-cfg-columns

Пролетарий 02.06.2015 09:54

Цитата:

Сообщение от AirGraph (Сообщение 373548)
1. Таблицу поместил бы в gridpanel. Слушал бы событие itemdblclick. В хандлере этого события есть параметр record - это Ваши данные.

http://docs.sencha.com/extjs/5.1/5.1...t-itemdblclick

Спасибо, за разъяснение, можно сказать половину пути пройдено и вопрос как получить данные, с вашей помощью решен, но как их передать в другую панель?
Я получаю двойной клик, перехожу в обработчик, где есть данные о текущей модели в строке, далее я вызываю что-то вроде
this.lookupReference('centerPanel').getLayout().setActiveItem(5)
, делая активным другую панель, вместо текущей с таблицей. Но как мне сообщить этой панели с номером 5, что она должна подгрузить данные из параметра record обработчика двойного клика?

Вот этот момент мне не понятен, как передать record в панель, на которую я переключаюсь? Теоретически думаю, что возможно можно как-то получить панель и присвоить ей модель с текущими данными, но найти в справке не могу, возможно не там ищу.

Цитата:

Сообщение от AirGraph (Сообщение 373548)
2. Вовсе не обязательно выводить в grid все поля, которые описаны в модели. Просто в конфиге store укажите модель, а в columns - опишите только те колонки, которые хотите видеть в grid (dataIndex Вам в помощь).

http://docs.sencha.com/extjs/5.1/5.1...el-cfg-columns

Ну значит всё же создают одну модель и уже потом используют его для разных представлений, хоть одно поле, хоть 20. Понятно, значит не буду дублировать модели.

Пролетарий 02.06.2015 10:51

Кажется нашел нечто похожее на что надо, но пока не пробовал как на практике будет получаться.
В панели формы Ext.form.Panel, которую как я понимаю всё равно надо использовать для редактирования, есть метод loadRecord(record), куда и загружается модель из выбранной строки таблицы. Надеюсь это то о чем я думаю.

loadRecord(record)

AirGraph 03.06.2015 11:23

Я бы попробовал fireEvent(eventName, recordObj) в обработчике двойного клика. Controller, услышав этот эвент, активировал бы ту карточку в tabPanel, которую надо и запустил бы метод этой карточки loadRecord (родной, если он есть и годится, или Ваш, как угодно). Возможно знатоки расскажут больше, про использование bind и про ViewController... ;-)

Пролетарий 03.06.2015 22:53

Как раз сейчас мучаюсь с fireViewEvent(), чтобы через событие данные передать, но не как не получается, слушатель и обработчик не откликаются, где что не так делаю не пойму и как отследить не знаю.

Цитата:

Сообщение от AirGraph (Сообщение 373692)
Я бы попробовал fireEvent(eventName, recordObj) в обработчике двойного клика. Controller, услышав этот эвент, активировал бы ту карточку в tabPanel, которую надо и запустил бы метод этой карточки loadRecord (родной, если он есть и годится, или Ваш, как угодно). Возможно знатоки расскажут больше, про использование bind и про ViewController... ;-)



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