W kontrolerze:Ember Data deleteRecord(), po której następuje wycofanie() - jak przywrócić obiekt do listy?
actions: {
selectDelete: function(note) {
console.log('selectDelete', note);
note.deleteRecord();
note.save().then(
function success() {
console.log('Deleted successfully');
}, function failure() {
console.log('Delete error before',
this.get('isDeleted'), this.get('isDirty'); //true, true
// note.transitionTo('loaded.saved'); //also has same effect
note.rollback();
console.log('Delete error after',
this.get('isDeleted'), this.get('isDirty'); //false, false
}
);
},
}
w szablonie:
{{#each note in model.notes}}
<li>
<span>{{note.text}}</span>
<span {{action 'selectDelete' note}}>[Delete]</span>
</li>
{{else}}
No Notes
{{/each}}
Teraz po kliknięciu na rozpiętości [Delete]
, akcja selectDelete
zostanie uruchomiony, z następującym wyjścia:
Delete error before true true
Delete error after false false
... co oznacza, że wycofanie się powiodło, a rekord rzeczywiście nie został usunięty.
Jednak podczas wywoływania deleteRecord()
aktualizuje DOM usunąć część reprezentującą usunięty rekord, wzywającą rollback()
wydaje się cofnąć zmiany do zapisu w pamięci, ale nie cofnąć zmiany w DOM.
Jak mogę zapewnić, że rollback()
powoduje tę zmianę?
Alternatywnie, czy istnieje sposób, aby zmienić domyślne zachowanie takie, że deleteRecord()
nie powoduje zmiany w DOM, i zamiast pozostawia bez zmian, odroczenie tej zmiany, dopóki success
zwrotna nazywa? (W ten sposób A powracając zmiany DOM nie będzie konieczne)
Wszystko działa zgodnie z oczekiwaniami podczas korzystania z this.store.find ("użytkownik") http://emberjs.jsbin.com/dibake/1/edit. Opierając się na moim jsbin można replikować swoją skrzynkę (konfiguracja konkretnych modeli, fałszywe odpowiedzi ...), myślę, że problem może być błąd podczas iteracji relacji hasMany. – ppcano
@ppcano 'deleteRecord()' does * not * faktycznie usuwa rekord lub wysyła żądanie HTTP do serwera. Dzieje się tak tylko przy 'save()'. Dlaczego wywołujesz 'deleteRecord()' w akcji 'del', ale wywołuj' save() 'w akcji' restore'? – bguiz
Właśnie testowałem twój przypadek użycia. – ppcano