2013-02-10 18 views
19

: Ben doğru kod her ne olması gerektiğini bilmek istiyorum Doğru temiz yukarı kodu

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 

devreden böylece mağaza kullanıcı eğer doğru bir durumdadır kaydetmez, saklar ya da her neyse.

Şu eğer kaydetmeden yeni rota doğrudan o zaman düzenleme yoluna güzergah ve, aşağıdaki hatayı alıyorum:

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

+0

Rotanın çıkışında kastediyor musunuz? Bunun gibi bir şey mi arıyorsunuz: http://stackoverflow.com/questions/14797338/ember-clear-form-after-submitting –

+0

Hata, özellikle düzenleme yolundan yeni rotaya doğrudan geçiş yapıldığında ve sonra değiştirilmeye çalışıldığında gerçekleşir model – dagda1

+0

Hey, bu eski bir soru, ama bunu yapmak için kanonik yolu anladınız mı? –

cevap

1

Bu soru kor verilerinin eski bir sürümü için, ancak cevap olurdu ilk önce isDeleted için durumu kontrol etmek ve kayıt zaten silinmemişse sadece geri alma olmuştur.

Daha yeni ember verilerde işlem kavramı yoktur, ancak henüz devam eden bir kaydı geri almaya çalışıyorsanız yine de benzer bir sorunla karşılaşabilirsiniz.

Kullanıcıya değişiklikleri kaydetme seçeneği vermek istiyorsanız geçişi iptal etme gibi şeyler yapabileceğiniz için muhtemelen bunu yönlendiriciler willTransition olayında yapardım.

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() 
    } 
    } 
    }