Хотя этот вопрос ответил я думаю, что это можно сделать по-другому (и более чистым) двумя способами.
Первый способ использования компакт-диска, который является отличным андерсером, но гораздо более чистым и без какой-либо логики в вашем 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);
}
}
}
Ничего себе, это здорово! Большое спасибо. – xdn