2013-07-02 10 views
6

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!

+0

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. –

+0

Mam podobny problem. Czy kiedykolwiek rozwiązałeś to? –

+0

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ć. –

Odpowiedz

0

To nie jest droga do robienia rzeczy w Ember Danych. Nie można już używać transakcji, co można zobaczyć w dokumencie przejścia: https://github.com/emberjs/data/blob/master/TRANSITION.md

+0

Usunąłem moje pytanie i nie mogę zaakceptować twojego, ponieważ nie jestem tym, który zapytał :) powinieneś zepsuć Taylan Pince ... – intuitivepixel

+0

Tak, każdy komentarz "załatwia" OP, jeśli dobrze rozumiem przepełnienie stosu. .. Nie jestem pewien, o jakie pytanie chodzi, przepraszam, ale wszystko dobrze :) Przepełnienie stosu jest denerwujące, jeśli chcesz pozbyć się starych rzeczy, znalazłem. "odpowiedź" oznacza "odpowiedź i akceptacja tej odpowiedzi". –

Powiązane problemy