2015-01-19 5 views
1

Я использую Extjs5.1, основанный на стиле кода, ориентированного на MVC.
У меня есть главный вид, который наследуется от Ext.panel.Panel с макетом границы.Панель master/slave в Extjs 5 MVC

  • В восточном регионе есть сетка с магазином, содержащим несколько записей (или «моделей», я не знаю, какую терминологию я должен использовать здесь). («главная сетка»)
  • В центральной области есть другой вид, который наследуется от Ext.form.Panel и который должен отображать выбранный элемент сетки. («ведомая форма»)

Моя цель - обновить «рабочую форму» с выбранной записью «главной сетки».

Единственный способ, которым я нашел «общение» между сеткой и формой, - выполнить fireEvent («selectRecord», ...) с главного контроллера и прослушать его внутри контроллера формы, но это кажется странным, поскольку вид формы является дочерним элементом основного вида.

Есть ли более распространенный способ сделать это?

С помощью corrolary, является ли прекрасная практика напрямую отображать функции вызова другого вида или мне нужно взаимодействовать только с их соответствующими контроллерами?

+1

Посмотрите на этот пример http://dev.sencha.com/ext/5.0.0/examples/grid/binding.html Как вы в конечном итоге ссылка на компоненты вполне подходит вам. –

ответ

1

То, что я обычно делаю, и я считаю, является наиболее распространенным подходом для этого, оказывает слушателя событий SelectionChange, который обновляет свою форму, как это:

listeners : { 
    selectionchange: function(model, records) { 
     var rec = records[0]; 
     if (rec) { 
      formpanel.getForm().loadRecord(rec); 
     } 
    } 
} 

для этого, чтобы работать, то name свойство вашего поля формы должны совпадать с именем полей в модели хранилища сетки.

Существует пример этого здесь: http://dev.sencha.com/extjs/5.1.0/examples/kitchensink/#form-grid

+0

Спасибо. Моя проблема в основном заключается в том, чтобы узнать, не является ли плохой практикой доступ к другому представлению напрямую, а не к использованию его контроллера. – Guid

+0

Вы должны использовать контроллер сетки для прослушивания события changechange, нет необходимости использовать контроллер панели формы. Я создал эту скрипку с помощью viewcontroller, поэтому у вас есть идея https://fiddle.sencha.com/#fiddle/gn0 –

Смежные вопросы