Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.06.2015, 22:47
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

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

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

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

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

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

Вот и получается, что при двойном клике в одной из строк таблицы с 5 полями, надо вместо неё вывести панель с полями для редактирования всех 20 полей этих данных. Опять же в эти 20 полей должны данные поступать из того что есть в модели на клиенте или надо их загрузить с сервера для этого конкретного объекта?
Ответить с цитированием
  #2 (permalink)  
Старый 02.06.2015, 02:19
Аспирант
Отправить личное сообщение для AirGraph Посмотреть профиль Найти все сообщения от AirGraph
 
Регистрация: 20.04.2015
Сообщений: 39

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
Ответить с цитированием
  #3 (permalink)  
Старый 02.06.2015, 10:54
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

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

http://docs.sencha.com/extjs/5.1/5.1...el-cfg-columns
Ну значит всё же создают одну модель и уже потом используют его для разных представлений, хоть одно поле, хоть 20. Понятно, значит не буду дублировать модели.

Последний раз редактировалось Пролетарий, 02.06.2015 в 10:57.
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2015, 11:51
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

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

loadRecord(record)
Ответить с цитированием
  #5 (permalink)  
Старый 03.06.2015, 12:23
Аспирант
Отправить личное сообщение для AirGraph Посмотреть профиль Найти все сообщения от AirGraph
 
Регистрация: 20.04.2015
Сообщений: 39

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

Последний раз редактировалось AirGraph, 03.06.2015 в 12:29.
Ответить с цитированием
  #6 (permalink)  
Старый 03.06.2015, 23:53
Аспирант
Отправить личное сообщение для Пролетарий Посмотреть профиль Найти все сообщения от Пролетарий
 
Регистрация: 01.06.2015
Сообщений: 57

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контекстное меню как считать данные из таблицы xela1980 jQuery 25 31.05.2013 14:20
Как передать значение по ссылке на другую страницу сайта Rollo Общие вопросы Javascript 7 18.10.2010 15:02
Как реализовать скроллинг в Div-е до указанной строки таблицы. Shabol Элементы интерфейса 3 24.09.2010 14:19
Как вложено прятать строки таблицы? Бобр Общие вопросы Javascript 10 01.08.2010 13:57
можно ли, если да то как удалить строки из таблицы Avaria Я не знаю javascript 3 11.06.2009 03:03