2014-05-20 1 views
0

양식이 데이터로 채워지는 방법이 많이 있습니다. ExtJS4 MVC 스타일로하고 싶습니다. 그러나 나는 이제 원치 않는 일이 일어나는 것을 보았습니다.모델 데이터로 양식을 업데이트 한 후 Combobox 저장소로드

내 양식에 상점에 연결된 콤보 상자가 있습니다. 모델 데이터로 서식을 채운 후 저장소가 채워집니다.

내보기/양식

Ext.define('WWT.view.settings.Form', { 
    extend : 'Ext.form.Panel', 
    alias : 'widget.settingsform', 
    title : 'WWT Instellingen', 
    bodyPadding : 5, 
    defaultType : 'textfield', 

    initComponent : function() { 
    var me = this; 
    me.dockedItems = me.buildToolbars(); 
    me.items = me.buildItems(); 
    me.callParent(); 
    }, 

    buildItems : function() { 

     var lovEdities = Ext.create('WWT.store.lov.Edities'); 

     return [{ 
       fieldLabel : 'Huidige Editie', 
       xtype : 'combo', 
       emptyText : 'Kies een Editie', 
       name : 'huidige_editie_id', 
       store : lovEdities, 
       queryMode : 'local', 
       displayField : 'naam', 
       valueField : 'id', 
       forceSelection : true 
      }, {fieldLabel : 'Scorebord Slogan', 
       name : 'scorebord_slogan_regel', 
       width: 200, 
       maxLength : 10 
      }, { 
       fieldLabel : 'Tijd Offset Scorebord', 
       name : 'scorebord_tijdoffset' 
      }]; 
    }, 
    buildToolbars : function() { 
    return [{ 
       xtype : 'toolbar', 
       docked : 'top', 
       items : [{ xtype:'button', 
          text : 'Save', 
          iconCls : 'save-icon', 
          action : 'save' 
         }] 
      }]; 
    } 
}); 

내 크롬 네트워크 창에서 내 컨트롤러

Ext.define('WWT.controller.settings.Settings', { 
    extend : 'Ext.app.Controller', 
    models : ['secretariaat.Settings'], 
    views : ['settings.Form'], 
    init : function() { 
     var me = this; 
     me.control({ 
        '#settingsId button[action=save]' : { 
         click : me.save 
        }, 
        'settingsform' : { 
         afterrender : function(view) { 

          Ext.ModelMgr 
            .getModel('WWT.model.secretariaat.Settings') 
            .load(1, { 
               success : function(record) { 
               view.loadRecord(record); 
               } 

              }); 
         } 
        } 

       }); 
    }, 
    save : function() { 
     var form = this.container.down('form'); 
     var model = this.getModel('settings.Settings').set(form.getForm() 
       .getValues()); 
     model.save(); 
    }, 
    addContent : function() { 
     this.container.add({ 
        id : 'settingsIDQ', 
        xtype : 'settingsform', 
        itemId : 'settingsId' 
       }); 
    } 
}); 

, 나는 가게 요청이 나중에 해고되는 것을 볼 수 있습니다. 양식을 업데이트하기 전에 상점을로드하는 방법에 대한 의견이 있으십니까? afterRender에서도이 작업을 수행 할 것으로 생각했지만 주문이 보장되지는 않는다고 생각합니다.

답변

0

(로드) 메커니즘에 문제가없는 것으로 보입니다. Combobox의 ID 필드와 설정의 일부인 필드의 데이터 유형에 문제가있었습니다. int 대 문자열.

이로 인해 문제가 발생했습니다.

0

몇 가지 다른 방법으로 양식로드 문제가 발생합니다.

응용 프로그램 전체에서 저장소를 많이 사용하는 경우 응용 프로그램로드시 저장소를로드하고 Ext.getStore('my store name here')으로 찾은 다음 시작시 .load()을 호출하여 저장소를로드합니다. 양식 자체에 도달 할 때만 상점 또는 상점을로드하려면 구성 요소 초기화를 initComponent에 연결 한 다음 양식 필드를 가져올 수 있고 for 루프를 사용하여 필드를 거쳐 모든 상점을 초기화 할 수 있습니다. .load() 양식 구성 요소가 서버 데이터에 액세스하기 전에

다음은 initComponent 메소드를 수정 한 것입니다. 이 코드는 디버깅하지 않았지만 잘 작동합니다.

initComponent() { 
    var me = this; 

    // this is where we will load all stores during init 
    var fields = me.getForm().getFields(); 
    for (var i = 0; i < fields.length; i++) { 
     var store = fields[i].getStore(); 
     if (store && !store.isLoaded()) { 
      store.load(); 
     } 
    } 

    me.dockedItems = me.buildToolbars(); 
    me.items = me.buildItems(); 
    me.callParent(); 
}, 
관련 문제