2012-07-06 21 views
12

Ta kolekcja zbiera grupę znajomych, a następnie używa reset, aby zapisać wszystkich nowych znajomych. Problemem, który mam, jest to, że dodaje tylko 1 znajomego do kolekcji.Dlaczego resetowanie kolekcji backbone.js powoduje tylko dodanie 1 modelu

Zrobiłem console.log na cModels i pokazywałem ponad 300 obiektów w Tablicy, więc wiem, że istnieje nie tylko 1. Jakiś powód, dla którego resetowałby tylko dodanie 1?

Oto moja kolekcja:

FriendsCollection = Backbone.Collection.extend({ 
    model: UserModel, 

    getFriends: function() { 
     $.post(baseUrl + dataFriendsUrl, $.proxy(function(data) { 
      var friends = $.parseJSON(data); 
      var cModels = []; 

      for(var key in friends.data) {     
       var user = new UserModel(); 
       user.set({ 
        fbid: friends.data[key].id, 
        username: friends.data[key].name 
       }); 

       cModels.push(user); 
      } 

      this.reset(cModels); 

      console.log(this); 

     }, this)); 
    } 
}); 

a modele wyglądają w porządku, po sprawdzeniu ich z narzędzi programistycznych.

+0

Kolekcja kręgosłupa. resetuje tylko kolekcję, a następnie wywołuje collection.add na wszystkim, co zostało do niej przekazane. Dodaj jest całkiem niezły w wyrzucaniu błędów, gdy masz problem, więc jestem zaskoczony, że go nie widzisz. Rzeczywista linia, która dokonuje dodania, to 'splice.apply (this.models, [index, 0] .concat (models));'. Możesz spróbować dodać wiersz 'debugger' lub' console.log (this.models, models, index) 'tuż przed nim, aby zobaczyć, czy twój pełny zestaw modeli robi to do tego punktu. – machineghost

Odpowiedz

28

Jest tak prawdopodobnie dlatego, że modele mają ten sam identyfikator.

Kolekcja kręgosłupa nie zezwala na modele z duplikatami wartości id. (zobacz ten commit)

+0

Jeśli tak było, to jednak OP powinien otrzymać błąd "Nie można dodać tego samego modelu do kolekcji dwukrotnie" – machineghost

+0

Miał rację - dodałem "id: klucz' wewnątrz' zestawu', i to naprawiło. – xil3

+1

@machineghost commit, do którego się odwołałem usunięto, podnosząc ten błąd – Paul

Powiązane problemy