2013-02-11 15 views
7

Jestem dość nowym użytkownikiem ember.js i robię kilka eksperymentów. Niedawno uderzyłem trochę o ścianę, próbując usunąć rekordy. Oto moja edycja trasy (z której nazywam usuwanie)podczas usuwania rekordu, przejście na inną trasę kończy się niepowodzeniem.

App.PostsEditRoute = Ember.Route.extend({ 
    model: function(params){ 
    return App.Post.find(params.id); 
    }, 
    exit: function() { 
    this._super(); 
    tx = this.get('currentModel.transaction'); 
    if(tx) 
     tx.rollback(); 
    }, 
    setupController: function(controller, model){ 
    controller.set('content', model); 
    }, 
    events: { 
    save: function(post){ 
     post.one('didUpdate', this, function(){ 
     this.transitionTo('posts.show', post); 
     }); 
     post.get('transaction').commit(); 
    }, 
    cancel: function(){ 
     this.transitionTo('posts.show', post); 
    }, 
    destroyPost: function(context) { 
     var post = context.get('content'); 
     post.deleteRecord(); 
     post.get('store').commit(); 
     this.transitionTo('posts.index'); 
    } 
    } 
}); 

Mam więc link, przez który uruchamiam destroyPost. Rekord został pomyślnie usunięty, a ja zaczynam przechodzić do trasy indeksu, ale wystąpił błąd ...

Błąd niezamierzony: próba obsłużenia zdarzenia rollback w stanie rootState.deleted.inFlight. Wywoływany z niezdefiniowanym

Po tym ładowanie modeli dla strony indeksu zatrzymuje się i otrzymuję pustą stronę. Mogę dostarczyć dowolny dodatkowy kod wymagany. Oto trasa indeksu.

App.PostsIndexRoute = Em.Route.extend({ 
    model: function(){ 
    return App.Post.find(); 
    }, 
    setupController: function(controller, model){ 
    controller.set('content', model); 
    } 
}); 

Należy zauważyć, że obie te trasy ładują się poprawnie same. Dopiero w okresie przejściowym otrzymuję błąd.

Odpowiedz

4

Musisz powiązać z didDelete, tak jak zrobiłeś to z didUpdate w metodzie zapisu.

destroyPost: function(context) { 
    var post = context.get('content'); 
    post.one('didDelete', this, function() { 
     this.transitionTo('posts.index'); 
    }); 
    post.deleteRecord(); 
    post.get('transaction').commit(); 
} 

Również kod wydaje się nieco sprzeczne: w metodzie ratowania jesteś popełnienia odrębną transakcję, natomiast w destroyPost jesteś popełnienia cały sklep.

+1

To działało. Wyciągnąłem kod z innego miejsca; Po prostu próbuję się uczyć w tym momencie. Powinienem jednak przeczytać lepiej dokumenty. Dzięki za wskazanie mi właściwego kierunku. – sentinel21

Powiązane problemy