2013-02-11 4 views
7

Sono abbastanza nuovo per ember.js e sto facendo alcuni esperimenti. Recentemente ho colpito un muro quando ho provato a cancellare i record. Ecco il mio percorso di modifica (da cui io chiamo eliminare)durante l'eliminazione del record, la transizione a un'altra rotta non riesce

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'); 
    } 
    } 
}); 

Così ho un link attraverso il quale ho innescare destroyPost. Il record è stato eliminato con successo e inizio a passare alla route dell'indice, ma si verifica un errore ...

Errore non rilevato: tentato di gestire l'evento rollback mentre si trovava nello stato rootState.deleted.inFlight. Chiamato con un numero indefinito

Dopo questo, il caricamento dei modelli per la pagina indice si interrompe e viene visualizzata una pagina vuota. Posso fornire qualsiasi codice aggiuntivo richiesto. Ecco la rotta dell'indice.

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

devo notare che entrambi questi percorsi carico correttamente da soli. È solo in transizione che ho fallito.

risposta

4

È necessario eseguire il binding a didDelete come si è fatto con didUpdate nel metodo di salvataggio.

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

Inoltre, il codice sembra un po 'incoerente: nel metodo di salvataggio che stai commettendo una transazione separata, mentre nel destroyPost si sta commettendo l'intero negozio.

+1

Questo ha funzionato. Ho estratto il codice da un'altra parte; Sto solo cercando di imparare a questo punto. Dovrebbe aver letto meglio i documenti, però. Grazie per avermi indicato nella giusta direzione. – sentinel21

Problemi correlati