У меня есть сетка, в которой появляется форма редактирования с полем со списком. Прежде чем показать представление, я загружаю хранилище со списком. Затем я устанавливаю значения формы, используя form.loadRecord(record);
. Это нормально загружает основную запись. Но как мне загрузить связанное значение данных, привязанное к полю со списком, чтобы значение поля со списком было установлено правильно.
Я знаю, что могу использовать setValue вручную, но, думаю, я думал, что это можно сделать с помощью формы загрузки.
Если в моей форме 3 поля, скажем, firstName lastName, а затем поле со списком ContactType. FirstName и lastName находятся в моей основной записи, а ContactType является связанной записью. Если я изменяю значения в полях lastName или firstName, изменение обнаруживается, и запись помечается как грязная. Если я изменю значение поля со списком, запись не будет помечена как грязная. Я предполагаю, потому что это две разные модели. Как сделать это одной записью. Я бы подумал, что поле со списком в форме, значения которого установлены из записи в сетке, является обычным явлением, но я не могу найти примеров наилучшего способа сделать это.
Вот некоторый код.
Мой json выглядит так. Основная запись имеет firstName lastName hasOne связанная запись — ContactType
{
"__ENTITIES":[
{
"__KEY":"289",
"__STAMP":12,
"ID":289,
"firstName":"a",
"middleName":"",
"lastName":"asd",
"ContactType":{
"__KEY":"2",
"__STAMP":4,
"ID":2,
"name":"Home"
}
}
]
}
Функция списка контроллеров, функция редактирования и функция обновления, срабатывает при нажатии строки сетки
list: function () {
var mystore = this.getStore('Contacts')
mystore.proxy.extraParams = { $expand: 'ContactType'};
mystore.load({
params: {
},
callback: function(r,options,success) {
// debugger;
} //callback
}); //store.load
editContact: function (grid, record) {
//load store for combobox
var store = this.getStore('ContactTypes');
store.load({
params: {
},
callback: function(r,options,success) {
// debugger;
} //callback
}); //store.load
var view = Ext.widget('contactsedit');
var form = view.down('form')
//load primary record
form.loadRecord(record);
//load associated record
form.loadRecord(record.getContactType());
updateContact: function (button) {
var win = button.up('window'),
form = win.down('form'),
record = form.getRecord(),
values = form.getValues(),
store = this.getStore('Contacts')
if (form.getForm().isValid()) {
if (this.addnew == true) {
store.add(values);
} else {
record.set(values);
}
store.sync();
win.close();
}
}
loadRecord(record.getContactType)
является получателем связанных данных. Я могу получить связанные данные, но не знаю, как заставить его установить значение в поле со списком или как заставить его действовать как одна запись и автоматически обнаруживать изменения.
Мои контакты Модель
Ext.define('SimplyFundraising.model.Contact', {
extend : 'Wakanda.model',
requires:[
'SimplyFundraising.model.ContactType'
],
fields: ['firstName', 'middleName','lastName','ContactType.name'],
associations: [
{
type: 'hasOne',
model: 'SimplyFundraising.model.ContactType',
name: 'ContactTypes',
getterName: 'getContactType',
associationKey: 'ContactType'
}
]
});
Модель ContactType
Ext.define('SimplyFundraising.model.ContactType', {
extend : 'Wakanda.model',
fields: ['__KEY','name',]
});
Это правильный способ установить значение для поля со списком в форме с вложенными данными?
Если я не использую ассоциации и просто помещаю все поля в свою модель контактов, то есть добавляю все поля ContactType в модель контактов, тогда данные должны быть в одной записи, и отслеживание изменений будет работать. Но это кажется противоречащим шаблону MVC и основанию для ассоциаций.
Как вы, ребята, справляетесь с этим сценарием, любые примеры были бы замечательными!
Спасибо, Дэн