2013-02-10 5 views
19

: 나는 올바른 코드가 각에 있어야하는지 알고 싶습니다 올바른 정리 코드

WZ.ExercisesNewRoute = Em.Route.extend 
    model: -> 
    WZ.Exercise.createRecord() 
    deactivate: -> 
    @_super.apply this, arguments 
    @get('currentModel.transaction').rollback() 

WZ.ExercisesEditRoute = Em.Route.extend 
    model: (params) -> 
    WZ.Exercise.find(params.exercise_id) 
    serialize: (params, options) -> 
    exercise_id: params.get('id') 
    deactivate: -> 
    @_super.apply this, arguments 
    tx = @get('currentModel.transaction') 
    tx.rollback() if tx 

비활성화 그렇게 가게는 사용자의 경우 정확한 상태에 저장하지 않거나 저장하지 않습니다.

현재 경우 저장하지 않고 새로운 경로로 직접 나서의 편집 행 노선과, 나는 다음과 같은 오류가 발생합니다 :

Uncaught Error: Attempted to handle event willSetProperty on while in state rootState.deleted.saved. Called with {reference: [object Object], store: , name: name}

+0

경로를 빠져 나가는 것을 의미합니까? 다음과 같은 것을 찾고 있습니까? http://stackoverflow.com/questions/14797338/ember-clear-form-after-submitting –

+0

편집 경로에서 새 경로로 직접 전환 한 다음 변경하려고 할 때 오류가 발생합니다 모델. – dagda1

+0

이 질문은 오래된 질문입니다. 그러나이를 수행 할 표준 방법을 알아 냈습니까? –

답변

1

이 질문은 타다 남은 데이터의 이전 버전이지만, 대답 할 것이다 isDeleted에 대한 상태를 먼저 확인하고 레코드가 이미 삭제되지 않은 경우에만 롤백하는 것이 었습니다.

최신 ember 데이터에는 트랜잭션 개념이 없지만 아직 보존되지 않은 레코드를 롤백하려는 경우에도 유사한 문제가 발생할 수 있습니다.

사용자가 변경 사항을 저장할 수있는 옵션을 제공하려는 경우 전환을 중단하는 등의 작업을 수행 할 수 있으므로 라우터의 willTransition 이벤트에서이 작업을 수행 할 수 있습니다.

willTransition: function(transition) { 
    controller = this.get('controller') 
    if(controller.get('content.isDirty')) { 
    if(controller.get('content.isNew') && confirm('Closing this window will revert all unsaved changes.')){ 
     controller.get('content').deleteRecord(); 
    } else { 
     controller.get('content').rollback() 
    } 
    } 
    }