Aby nauczyć się kręgosłupa, tworzę aplikację podobną do Twittera. Więc wiesz, że Twitter wysyła żądanie GET do serwera co N sekund, aby sprawdzić nowe tweety. Jeśli są nowe tweety, tworzy ukryte elementy i pokazuje przycisk z "N nowe tweety". Jeśli go klikniesz, wyświetli ukryte elementy li, pokazując nowe tweety. Ale zachowanie jest inne, gdy dodajesz nowy tweet: tweet jest widoczny. Nie musisz klikać przycisku, aby go zobaczyć.Backbone collection.create() nie zwraca zaktualizowanego modelu.
Już zrobiłem pierwszą część, dla ukrytych tweetów. Dla części zamieszczając nowy tweet i przedstawiający go direclty, myślałem, że będzie łatwo zrobić poprzez stworzenie nowego modelu, nazywając collection.create() i wywołując odpowiednią wydarzenie, coś takiego:
var newTweet = new Tweet();
newTweet.set(/* set the attributes here. Some attributes are missing, because they are calculated server side */);
var created_tweet = this.collection.create(newTweet, { silent: true, wait: true }); // I choose silent=true because the add event on my collection is in charge of adding the new hidden tweets when there are new ones on the server
this.collection.trigger("posted_new_tweet", created_tweet);
Następnie moja kolekcja subskrybuje wydarzenie "posted_new_tweet", więc za każdym razem, gdy użytkownik wysyła nowy tweet, wywoływana jest określona metoda mojej kolekcji. To podejście działało dobrze, dopóki nie otrzymałem błędów z powodu zmiennej created_comment przekazanej w wyzwalaczu: nie jest ona "kompletna". Mam na myśli, że model ma pewne atrybuty, takie jak "id" lub * "created_on" *, które są niezdefiniowane. Te atrybuty są obliczane po stronie serwera, ale pomyślałem, że jeśli przekażę wait = true, to będzie czekać i zaktualizować mój model z odpowiedzią udzieloną przez serwer (gdy zostanie wysłane do serwera żądanie, POST, zwraca ono nowy stworzony model w json)
Czy mój model nie powinien mieć atrybutów po stronie serwera? Czy jest to właściwe podejście do takiego problemu? Jeśli nie jest, w jaki sposób mogę mieć 2 różne metody wyświetlania widoku kolekcji?
Dziękujemy!
Zgadza się :) Dziękuję! – fiunchinho
Wierzę, że w późniejszych wersjach Backbone, argumenty są teraz 'nextModel' i' response'. – IanS