2012-12-19 5 views
6

Znalazłem na GitHub dobry przykład pracy dla danych ember pod https://github.com/dgeb/ember_data_example i spróbuj przedłużyć go o zagnieżdżony zasób ('has_many: comments'). W oryginalnym przykładzie nowa transakcja jest tworzona za każdym razem, gdy widok edycji jest włączony i jest wysyłana/wycofywana, jeśli tryb edycji jest zapisany.Ember-data: jak udostępnić i zaktualizować obiekt w transakcji między działaniami kontrolera?

Próbuję dodać nowy komentarz do content.comments Nie mogę tego zrobić i mam błąd, ponieważ "treść" już jest w transakcji (Błąd: brak potwierdzenia: po zmianie rekordu nie można go przenieść do innej transakcji).

Czy pomysł, który próbuję zrealizować, jest zły i muszę podjąć inną decyzję?

App.EditContactController = Em.Controller.extend({ 
    content: null, 

    addComment: function() { 
    // ERROR here: 
    this.get('content.comments').addObject(App.Comment.createRecord({body: ''})); 
    }, 

    enterEditing: function() { 
    this.transaction = this.get('store').transaction(); 
    if (this.get('content.id')) { 
     this.transaction.add(this.get('content')); 
    } else { 
     this.set('content', this.transaction.createRecord(App.Contact, {})); 
    } 
    }, 

    exitEditing: function() { 
    if (this.transaction) { 
     this.transaction.rollback(); 
     this.transaction = null; 
    } 
    }, 

    updateRecord: function() { 
    // commit and then clear the transaction (so exitEditing doesn't attempt a rollback) 
    this.transaction.commit(); 
    this.transaction = null; 
    } 
}); 

Odpowiedz

1

Myślę, że można czerpać inspirację z tego, co zrobiłem: https://github.com/sly7-7/ember_data_example/commit/57ee7ea6ca44e3a2fbba96fff4ad088a8d786a3c

Może po prostu robi this.get('content.comments').createRecord({body: ''}) zadziała. To wywołanie odwołuje się do ManyArray.createRecord() i używa transakcji właściciela relacji w celu utworzenia nowego rekordu. zobacz https://github.com/sly7-7/data/blob/master/packages/ember-data/lib/system/record_arrays/many_array.js#L163

Powiązane problemy