2012-01-04 4 views
0

아코디언 레이아웃으로 나뉘어 진 두 개의 그리드가 있습니다. 그것들은 기본적으로 같은 종류의 데이터를 보여주기 때문에 그룹화 된 그리드가 트릭을 수행해야하지만,이 방법은 실제로 좋게 보이고 지금까지는 잘 작동합니다.Extjs 모델 저장 후 그리드가 비게됩니다.

그리드 왼쪽에는 그리드 레코드를 편집하는 데 사용되는 양식 패널이 있는데 그리드의 레코드를 클릭하면 해당 데이터가 양식에 표시됩니다. 데이터를 편집 할 수 있지만 'model '.save() 액션을 트리거하는 저장 버튼을 클릭하면 관련 그리드 행이 공백으로 표시되고 더티 플래그가 표시됩니다. 모델을 확인한 결과 'data'속성에 데이터가 없지만 ID는 'modified'속성에 있습니다.

빨간색 더티 플래그는 데이터가 백엔드에서 지속되지 않는다는 것을 의미하지만이 경우는 그렇습니다. 요청은 200 상태 코드와 성공 (true)으로 반환됩니다.

컨트롤러에서 된 OnSave있어서

onSave : function() { 
    // Get reference to the form 
    var stepForm = this.getStepForm(); 

    this.activeRecord.set(stepForm.getForm().getValues()); 

    this.activeRecord.save(); 

    console.log(this.activeRecord); 
} 

단계 가기 :

Ext.define('Bedrijfsplan.store.Steps', { 
    extend : 'Ext.data.Store', 

    require : 'Bedrijfsplan.model.Step', 

    model : 'Bedrijfsplan.model.Step', 

    autoSync : true, 

    proxy : { 
     type : 'rest', 

     url : 'steps', 

     reader : { 
      type : 'json', 

      root : 'steps' 
     }, 

     writer : { 
      type : 'json', 

      writeAllFields : false, 

      root : 'steps' 
     } 
    } 
}); 

단계 초상권

Ext.define('Bedrijfsplan.model.Step', { 
    extend : 'Ext.data.Model', 

    fields : [ 'id', 'section_id', 'title', 'information', 'content', 'feedback' ], 

    proxy : { 
     type : 'rest', 

     url : 'steps', 

     successProperty : 'success' 
    } 
}); 

단계 그리드

Ext.define('Bedrijfsplan.view.step.Grid', { 
    extend : 'Ext.grid.Panel', 

    alias : 'widget.stepsgrid', 

    hideHeaders : true, 

    border : false, 

    columns : [ { 
     header : 'Titel', 

     dataIndex : 'title', 

     flex : 1 
    } ] 
}); 

검색 및 시도에 몇 시간을 소비하지만 해결책을 찾지 못했습니다. 이 문제에 어떤 도움을 주시면 감사하겠습니다 :)

답변

0

귀하의 모델 업데이트 코드 : this.activeRecord.set (stepForm.getForm()에 getValues ​​().);

작동해야하지만 두 줄로 나누고 중단 점을 설정하여 getValues ​​()가 예상 한 값을 반환하는지 확인하는 것이 좋습니다.

양식의 각 필드에 대해 name 특성이 설정되어 있고 모델의 필드 이름과 정확하게 일치하는지 확인하십시오.

마지막으로 저장소에 속한 모델로 작업 할 때 모델의 .save()보다 .sync()를 호출하는 것이 좋습니다. 저장소에있는 autoSync: true 옵션을 사용하면 모델 중 하나에 대한 유효한 업데이트를 할 때마다이 작업이 자동으로 수행됩니다.

BasicForm.loadRecord 및 BasicForm.updateRecord 방법

는 당신이 더 잘 작동 할 수 추구하고있는 기능 주위에 좋은 래퍼 제공 :

onRowSelected: function(activeRecord) { 
    stepForm.getForm().loadRecord(activeRecord); 
} 

onSaveClick: function() { 
    var activeRecord = stepForm.getForm().getRecord(); 
    stepForm.getForm().updateRecord(activeRecord); 
    activeRecord.store.sync(); 
} 
+0

감사합니다 ,이게 내 문제를 해결 해줄거야! 그러나 한 가지 문제는 상점 동기화가 백엔드에 저장되지 않은 빈 레코드를 만드는 경우입니까? – Jacob

+0

[Data Package Guide] (http://docs.sencha.com/ext-js/4-0/#!/guide/data)에서 모델 유효성 검사에 대한 내용을 읽으십시오. 유효성 검사를 통과하지 못한 모델은 유효하지 않습니다. .sync()를 호출하면 백엔드로 전송됩니다.모델의 유효성 검사기를 설정하여 저장하기에 충분할 때까지 모델이 서버로 전송되지 않도록하십시오. –

+0

나는 조금 더 분명 했어야했다. 모델은 서버에 저장되지만 저장할 때 저장소는 아무 것도없는 새로운 빈 레코드를 만듭니다. 예를 들어 저장소에는 2 개의 레코드가 있지만 서버에 하나를 업데이트 한 후 갑자기 3이됩니다. 실제로 이상한 동작입니다. 지금까지 유효성 검사를 사용하지 않았습니다. – Jacob

0

내가 볼 수있는 유일한 기이이 함께 : 나는 항상 결코 기록에 가게에 .set()을 사용했습니다 this.activeRecord.set(stepForm.getForm().getValues());

. 예컨대 :

myDataStore.set(stepForm.getForm().getValues()); 
+0

이 상점은 방법이없는'를 설정()' – Jacob

관련 문제