2015-09-29 1 views
1

У меня есть grid с data. Когда я выбираю row и нажимаю 'edit' button на tbar, я хочу посмотреть window (включая form) с данными из selected row. Fiddle: https://fiddle.sencha.com/#fiddle/ukpЗагрузить выбранные записи в текстовые окна

Но я не знаю, как получить доступ к текущему selected row или как пройти data от одного controller к другому (GridController ->WindowController).

Заранее благодарен!

ответ

3

Вы можете передать запись в окно.
В ExtJS 6 вы можете использовать viewModel и bind поля, например:

// In The controller 

var selectionModel = grid.getSelectionModel(); 

Ext.create({ 
    xtype: 'my-window', 
    viewModel: { 
     data: { 
      rec: selectionModel.getSelection()[0] 
     } 
    } 
}); 

// The window 

items: [{ 
    xtype: 'textfield', 
    fieldLabel: 'Firstname', 
    bind: '{rec.firstName}' 
}, { 
    xtype: 'textfield', 
    fieldLabel: 'Lastname', 
    bind: '{rec.lastName}' 
}] 

Работа пример на основе кода: https://fiddle.sencha.com/#fiddle/ukr

+0

Ничего себе, это здорово! Большое спасибо. – xdn

4

Хотя этот вопрос ответил я думаю, что это можно сделать по-другому (и более чистым) двумя способами.

Первый способ использования компакт-диска, который является отличным андерсером, но гораздо более чистым и без какой-либо логики в вашем controller. Просто позвольте viewmodel делать свою работу:

Config bind свойство к selection на вашем grid:

bind: { 
    selection: '{rec}' 
}, 

Поля остаются прежними:

items: [{ 
    xtype: 'textfield', 
    fieldLabel: 'Firstname', 
    bind: '{rec.firstName}' 
}, { 
    xtype: 'textfield', 
    fieldLabel: 'Lastname', 
    bind: '{rec.lastName}' 
}] 

Вот и все. Теперь вы можете удалить логику в своем окне controller.

Рабочий пример: https://fiddle.sencha.com/#fiddle/ulf

Второй способ, я использую это много, это deep binding на вашем viewmodel. Это нужно отслеживать на выбранном record, независимо от того, где он был изменен. Это может быть достигнуто bind с deep: true.

В вашем (отдельный) viewmodel месте formula:

formulas: { 
    rec: { 
     // We need to bind deep to be notified on each model change 
     bind: { 
      bindTo: '{myGrid.selection}', //--> reference configurated on the grid view (reference: myGrid) 
      deep: true 
     }, 
     get: function(record) { 
      return record; 
     }, 
     set: function(record) { 
      if(!record.isModel) { 
       record = this.get('records').getById(record); 
      } 
      this.set('currentRecord', record); 
     } 
    } 
} 
+1

Отличный ответ! это действительно выглядит лучше .. :-) –

+0

привязка выбора НЕ работает для меня. Ответ @CD работает! Я на ExtJS 6.5.1 – shikhanshu

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

  • Нет связанных вопросов^_^