Używam prostego Ember.ArrayController
w aplikacji z ember-data
(najnowsza), ember rc6
i kontrolera REST stock stock.deleteRecord nie aktualizuje ArrayController gdy Model jest filtrowany
muszę usuwać działań obok każdej pozycji na liście świadczonych przez kontrolera tablicy. Po usunięciu elementu wykonywane jest właściwe wywołanie interfejsu API REST i jest ono poprawnie usuwane z bazy danych. Serwer odpowiada prawidłową odpowiedzią 204
.
Oto moja konfiguracja routera zauważyć filtr znalezisko stosowane
App.CategoriesIndexRoute = Ember.Route.extend({
setupController : function(controller, model) {
this._super(controller, model);
controller.set("content", App.Category.find({
"parent": null,
}));
}
});
Jeśli usunąć filtr znaleźć i załadować wszystkie kategorie, wszystko działa w porządku (element zostanie automatycznie usunięty z listy natychmiast po commit). Jednak po dodaniu filtru do wyświetlania tylko kategorii, które nie mają elementu nadrzędnego, lista nie jest aktualizowana po usunięciu elementu. Jeśli przejdę do innej sekcji i wrócę, lista zostanie przeładowana, a kategoria zniknie.
Oto deleteCategory
metoda w ArrayController
:
deleteCategory: function(category) {
var transaction = this.get("store").transaction();
transaction.add(category);
category.deleteRecord();
transaction.commit();
}
Czy to ember-data
lub emberjs
bug? Jeśli nie, co ja tu robię źle? Jeśli jest to błąd, czy istnieje sposób na wymuszenie ponownego załadowania zawartości ArrayController po usunięciu elementu? Alternatywnie, czy mogę ręcznie usunąć kategorię z ArrayController?
UPDATE 1:
udało mi się wymusić aktualizację zawartości kontroler macierzy poprzez ustawienie jej zawartość:
category.one("didDelete", this, function() {
this.set("content", App.Category.find({
parent: parent_category
}));
});
UPDATE 2:
Oto jak ja wyświetlania listy elementów w szablonie:
{{#each category in controller.content }}
<tr>
<td><a {{ action "detailCategory" category }}>{{ category.name }}</a></td>
<td><a {{ action "deleteCategory" category }}>Delete</a></td>
</tr>
{{/each}}
Dziękujemy!
Dwie uwagi: Przetestowałem to z innymi rodzajami filtrów i nie powiedzie się, jeśli do zapytania modelu zostanie zastosowany filtr. Działa tylko bez filtrów, w przeciwnym razie lista nie jest aktualizowana. Znalazłem również sposób na wymuszenie ponownego załadowania zapytania ArrayController poprzez ustawienie jego zawartości po zakończeniu usuwania. To na razie, ale to paskudny hack. –
Mam podobny problem. Czy kiedykolwiek rozwiązałeś to? –
W końcu wyśledziłem ten problem w dół do pól wyboru, które miałem obok każdego elementu na liście. Każde pole wyboru było powiązane z atrybutem powiązanego obiektu i powodowało błędne zdarzenia podczas ładowania listy, powodując ten problem. W efekcie usunąłem pola wyboru i zdarzenia z nimi związane, aby rozwiązać problem. Jeśli potrzebujesz więcej szczegółów, przekopię się dalej i dam ci znać. –