Mam problem z usunięciem elementu z kolekcji wewnątrz modelu w widoku. Zasadniczo struktura modelu/kolekcja jest następujący:kolekcja backbone.js nieprawidłowo usuwa element w widoku
Zasadniczo, gdy próbuję usunąć element z kolekcji sub elementu w pozycji sub zobaczyć to faktycznie usuwa właściwej pozycji z kolekcji. Jednak gdy przychodzę do utrzymania modelu głównego, wydaje się, że przedmiot wciąż znajduje się w kolekcji.
To jak moje poglądy są tak skonstruowane:
Główny widok wstawia węzłów DOM wymaganych przez głównego modelu, a ich głównym modelem tworzy nowy widok dla modelu poz itp Wszystkie widoki są coraz główny model jako opcja modelu tak:
new App.Views.MainModelView({
model : this.model,
el : $('#nodeID')
})
Jedyna różnica polega na stworzeniu modelu widoku podpunkt, w którym, ze względu na ponowne użyteczność widzenia i szablonu, nadal przechodzą w głównym model, jednak przechodzę także do elementu w kolekcji item, która jest cur czynsz jest modyfikowany. Który wygląda tak:
new App.Views.ItemView({
model : this.model,
item : this.selectedItem,
el : $('#nodeID')
});
W metodzie widok Init podpunktu za I wykonaj następujące czynności:
this.item = (this.options.item) ? this.options.item : this.model;
Aby usunąć podpunkt z kolekcji podpunkt robię:
removeSubItem : function(e) {
// get the id of the sub-item to be removed
var id = $(e.target).closest('tr').attr('data-id');
if (!id) throw "Could not retrieve data id";
// retrieve the sub-item from the collection
var subItem = this.item.subItems.get(id);
// remove the sub-item from the collection
this.item.subItems.remove(subItem);
},
Jak już wspomniałem wcześniej, kiedy usuwam podpunkt i sprawdzam kolekcję zmodyfikowaną przez widok, widzę, że podelement został usunięty z kolekcji, jednak wtedy utrzymuję główny model usuniętego pod-elementu. element ponownie się wyświetla. Prowadzi mnie to do przekonania, że gdzieś po linii można sklonować kolekcję podpunktu, co mogłoby wyjaśnić nagłe ponowne pojawienie się podpunktu.
Wiem, że jest to dość specyficzny problem i nie jestem pewien, czy możliwe jest dotarcie do przyczyny problemu z tym, co tu podałem, jeśli potrzebujesz więcej informacji, proszę dać mi znać.
Dzięki za pomoc,
Vincent
========== EDIT ============
Aby odpowiedzieć na niektóre poniższe pytania pozwalają mi przedstawić zakres, w którym doświadczam tego problemu:
Jeśli konsola loguje kolekcję this.item.subItems w widoku SubItem, po wywołaniu metody removeSubItem widzę, że wystąpienie SubItem model został pomyślnie usunięty. Zanim zadzwonię do metody zapisu na głównym modelu, konsola zarejestruje powrót funkcji toJSON. W tym momencie mam problem, że poprzednio usunięta instancja jest "wstecz" w kolekcji. Monitorowałem ruch między klientem a serwerem zarówno za pomocą Wireshark, jak i konsoli deweloperów Google Chrome i nie było żadnego połączenia z serwerem, aby odświeżyć którykolwiek z modeli.
Metoda toJSON do zbierania podpunkt wygląda następująco:
toJSON : function() {
App.log(["SubItem::collection::toJSON", this], "info");
var json = {};
// make sure the key for each SubItem is the primary key
this.each(function(subItem) {
json[subItem.get('id')] = subItem.toJSON();
});
return json;
}
Wyjaśnij lub pokaż nam, co masz na myśli, mówiąc "trwający" i jak to robisz i jak go ponownie ładujesz. – Julien
Kiedy mówię o utrzymywaniu, mam na myśli zapisywanie modeli na serwerze, wywołując w ten sposób metodę zapisu w głównym modelu. Zapisywanie odbywa się za pomocą szeregu natywnych lub nadpisanych metod JSON. Zobacz edycję, aby uzyskać więcej informacji. – luxerama