Ext.form.Panel load() 与 loadRecord()
Ext.form.Panel load() vs. loadRecord()
我在使用 json 请求响应加载表单面板时遇到奇怪的问题。
在以前的项目中,我曾经使用 loadRecord(record) 从网格存储加载详细信息面板
该商店具有关联的模型,因此记录的嵌入对象被映射到模型的属性,并且表单可以毫无问题地呈现这些字段。
一旦我不得不使用 form.load() 的响应直接加载表单,我就看不到记录的嵌入对象的属性。
例如来自 json
{
"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"
},
...
}
}
我看到呈现的 'code' 和 'name' 属性,但没有看到 'street' 和 'city'。
这是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);
没有正确填充模型的字段 'street' 和 'city'。这也可能是问题的原因。
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'},
...
]
});
能否指出问题的真正原因或建议任何解决方案。
谢谢。
我刚刚为你做了 fiddle。看看它是如何工作的,然后用你的代码试试:
Sencha Fiddle - How associated data works
如果这是您正在寻找的内容,请标记为已回答。
我在使用 json 请求响应加载表单面板时遇到奇怪的问题。 在以前的项目中,我曾经使用 loadRecord(record) 从网格存储加载详细信息面板 该商店具有关联的模型,因此记录的嵌入对象被映射到模型的属性,并且表单可以毫无问题地呈现这些字段。 一旦我不得不使用 form.load() 的响应直接加载表单,我就看不到记录的嵌入对象的属性。 例如来自 json
{
"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"
},
...
}
}
我看到呈现的 'code' 和 'name' 属性,但没有看到 'street' 和 'city'。
这是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); 没有正确填充模型的字段 'street' 和 'city'。这也可能是问题的原因。
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'},
...
]
});
能否指出问题的真正原因或建议任何解决方案。 谢谢。
我刚刚为你做了 fiddle。看看它是如何工作的,然后用你的代码试试:
Sencha Fiddle - How associated data works
如果这是您正在寻找的内容,请标记为已回答。