2015-07-29 2 views
0

У меня странная проблема с панелью формы загрузки с ответом на запрос 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'}, 
     ... 
    ] 
}); 

Не могли бы вы указать реальную причину проблемы или предложить любое решение. Спасибо.

ответ

1

Я только что сделал скрипку для вас. Посмотрите, как это работает и попробовать то же самое с кодом:

Sencha Fiddle - How associated data works

Если это то, что вы ищете только маркируют как ответил.

+0

Как я понял, вы предлагаете использовать хранилище для записи нагрузки для формирования. Спасибо. – AlexeiP

+0

Да, это правильно. В методе обратного вызова, когда хранилище загружается данными. –

Смежные вопросы