Ext.form.Panel load()与loadRecord()

时间:2015-07-29 15:11:22

标签: javascript extjs extjs4.2 extjs-mvc

我在使用json请求响应加载表单面板时遇到了奇怪的问题。 在之前的项目中,我曾经使用loadRecord(记录)从网格存储中加载详细信息面板 商店具有关联模型,因此记录的嵌入对象被映射到模型的属性,并且形式呈现这些字段没有任何问题。 一旦我不得不直接使用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"
      },
    ...
   }
}

我看到了渲染的代码'和' 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'},
        ...
    ]
});

请您指出问题的真正原因或建议任何解决方案。 谢谢。

1 个答案:

答案 0 :(得分:1)

我只是为你做了小提琴。看看它是如何工作的,并尝试使用您的代码:

Sencha Fiddle - How associated data works

如果你要找的东西只是标记为已回答。