01.06.2015, 21:47
|
Аспирант
|
|
Регистрация: 01.06.2015
Сообщений: 57
|
|
Как передать данные в другую панель из выбранной строки таблицы. layout: 'card'.
Всем привет.
Только начал изучать ExtJS и поэтому смутно представляю как тут делаются некоторые вещи. Покажите в какую сторону копать, а то с примерами на официальном сайте вроде не нахожу похожего. Может это вообще нельзя сделать в ExtJS и надо как-то по другому подстраиваться.
У меня есть панель со свойством layout: 'card', т.е. одновременно может показываться только один её итем. Каждый из итемов это или таблица или панель с чем-то ещё и таблицей. Как добавлять, удалять и загружать данные в таблицу разобрался, но в одной из них у меня очень много данных.
Получается, у меня есть таблица, при двойном клике на которую, вместо таблицы должна появится панель для редактирования в том же самом месте, т.к. у меня layout: 'card' то я хочу добавить итем с формой для редактирования в общий список, но как передать в эту форму данные из выбранной строки не знаю. Как это можно сделать? Или это может как-то по другому делают?
В связи с чем есть ещё вопрос по организации модели. У меня есть некоторые данные, которые состоят из 20 полей, но в таблице нужно вывести скажем 5 из них, остальные не надо. Мне нужно создавать две модели или одну? Т.е. одна модель из 5 полей для таблицы, а другая из 20 полей для редактирования. Или надо создать одну модель из 20 полей, которую использовать и для таблицы и для редактирования?
Вот и получается, что при двойном клике в одной из строк таблицы с 5 полями, надо вместо неё вывести панель с полями для редактирования всех 20 полей этих данных. Опять же в эти 20 полей должны данные поступать из того что есть в модели на клиенте или надо их загрузить с сервера для этого конкретного объекта?
|
|
02.06.2015, 09:54
|
Аспирант
|
|
Регистрация: 01.06.2015
Сообщений: 57
|
|
Спасибо, за разъяснение, можно сказать половину пути пройдено и вопрос как получить данные, с вашей помощью решен, но как их передать в другую панель?
Я получаю двойной клик, перехожу в обработчик, где есть данные о текущей модели в строке, далее я вызываю что-то вроде
this.lookupReference('centerPanel').getLayout().setActiveItem(5)
, делая активным другую панель, вместо текущей с таблицей. Но как мне сообщить этой панели с номером 5, что она должна подгрузить данные из параметра record обработчика двойного клика?
Вот этот момент мне не понятен, как передать record в панель, на которую я переключаюсь? Теоретически думаю, что возможно можно как-то получить панель и присвоить ей модель с текущими данными, но найти в справке не могу, возможно не там ищу.
Сообщение от AirGraph
|
2. Вовсе не обязательно выводить в grid все поля, которые описаны в модели. Просто в конфиге store укажите модель, а в columns - опишите только те колонки, которые хотите видеть в grid (dataIndex Вам в помощь).
http://docs.sencha.com/extjs/5.1/5.1...el-cfg-columns
|
Ну значит всё же создают одну модель и уже потом используют его для разных представлений, хоть одно поле, хоть 20. Понятно, значит не буду дублировать модели.
Последний раз редактировалось Пролетарий, 02.06.2015 в 09:57.
|
|
02.06.2015, 10:51
|
Аспирант
|
|
Регистрация: 01.06.2015
Сообщений: 57
|
|
Кажется нашел нечто похожее на что надо, но пока не пробовал как на практике будет получаться.
В панели формы Ext.form.Panel, которую как я понимаю всё равно надо использовать для редактирования, есть метод loadRecord(record), куда и загружается модель из выбранной строки таблицы. Надеюсь это то о чем я думаю.
loadRecord(record)
|
|
03.06.2015, 11:23
|
Аспирант
|
|
Регистрация: 20.04.2015
Сообщений: 39
|
|
Я бы попробовал fireEvent(eventName, recordObj) в обработчике двойного клика. Controller, услышав этот эвент, активировал бы ту карточку в tabPanel, которую надо и запустил бы метод этой карточки loadRecord (родной, если он есть и годится, или Ваш, как угодно). Возможно знатоки расскажут больше, про использование bind и про ViewController... ;-)
Последний раз редактировалось AirGraph, 03.06.2015 в 11:29.
|
|
03.06.2015, 22:53
|
Аспирант
|
|
Регистрация: 01.06.2015
Сообщений: 57
|
|
Как раз сейчас мучаюсь с fireViewEvent(), чтобы через событие данные передать, но не как не получается, слушатель и обработчик не откликаются, где что не так делаю не пойму и как отследить не знаю.
Сообщение от AirGraph
|
Я бы попробовал fireEvent(eventName, recordObj) в обработчике двойного клика. Controller, услышав этот эвент, активировал бы ту карточку в tabPanel, которую надо и запустил бы метод этой карточки loadRecord (родной, если он есть и годится, или Ваш, как угодно). Возможно знатоки расскажут больше, про использование bind и про ViewController... ;-)
|
|
|
|
|