У меня странная проблема с панелью формы загрузки с ответом на запрос json. В предыдущих проектах я использовал для загрузки панели деталей из хранилища сетки с помощью loadRecord (запись) В магазине есть связанная модель, поэтому встроенные объекты записи сопоставляются с свойствами модели, и форма без каких-либо проблем отображает эти поля. Как только мне пришлось загрузить форму напрямую с помощью ответа от form.load() Я не вижу свойства из встроенных объектов записи. Например, из JSONExt.form.Panel load() vs. loadRecord()
{
"message":null,
"success":true,
"data":{
"code":"1",
"name":"Canon Canada",
"modifiedBy":null,
"modifiedAt":null,
"address":{
"street":"6390 Dixie",
"suite":null,
"city":"Mississauga",
"provinceCode":"ON",
"postalCode":"L5T1P7"
},
...
}
}
Я вижу, оказанные «код» и свойства «Имя», а не «улицы» и «город».
Вот form.Panel код
Ext.define('App.view.billto.BillToDetailForm' ,{
extend : 'Ext.form.Panel'
,layout: 'form'
,alias : 'widget.BillToDetailForm'
,autoHeight: true
,bodyPadding: 10
,fieldDefaults: MainAppViewConfig.fieldDefaults
,defaults: {xtype: 'fieldcontainer',layout:'hbox', anchor: '100%'}
,items : [ { defaults: {xtype: 'textfield', allowBlank: false},
items: [{name: 'code', fieldLabel:'Bill To Code'}
,{name: 'name',fieldLabel: 'Name'}]}
,{ defaults: {xtype: 'textfield', allowBlank: false},
items: [{name: 'address.suite', fieldLabel:'Suite'}
,{name: 'address.street', fieldLabel:'Street'}]}
...
]
,loadContentForCode: function(code){
//this.getForm().trackResetOnLoad = true;
this.getForm().load({ method: 'GET',url: 'billtoDetail',
params:{'code':code},
waitMsg: 'Loading...',
/*success:function(form, action) {
console.log('BillToDetailForm:loadContentForCode callback on success '+this);
var responseObj = Ext.JSON.decode(action.response.responseText,true);
var billToModel = Ext.create('MPS.model.BillToModel',responseObj.data);
form.loadRecord(billToModel);
}*/
});
}
});
Как вы можете видеть, что я даже сделал неудачную попытку перегрузить форму в обработчике успеха.
Также я заметил, что var billToModel = Ext.create ('MPS.model.BillToModel', responseObj.data); не имеет должным образом заполненные поля модели «улица» и «город». Это также может быть причиной проблемы.
Ext.define('MPS.model.BillToModel', {
extend: 'Ext.data.Model'
,idProperty:'code'
,fields: [
{name: 'code', type: 'string'},
{name: 'name', type: 'string'},
{name: 'street',mapping:'address.street', type: 'string'},
{name: 'city', mapping:'address.city', type: 'string'},
...
]
});
Не могли бы вы указать реальную причину проблемы или предложить любое решение. Спасибо.
Как я понял, вы предлагаете использовать хранилище для записи нагрузки для формирования. Спасибо. – AlexeiP
Да, это правильно. В методе обратного вызова, когда хранилище загружается данными. –