2012-07-06 4 views
12

問題のコレクションはたくさんのFriendsをつかんで、resetを使ってすべての新しいFriendsを保存します。私が持っている問題は、コレクションに1人の友人しか追加しないということです。私のbackbone.jsコレクションのリセットが1つのモデルを追加するのはなぜですか

cModelsconsole.logを実行しましたが、アレイ内に300個以上のオブジェクトが表示されていました。そのため、リセットだけが1を追加する理由は何ですか?

は、ここに私のコレクションです:

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)); 
    } 
}); 

とモデルは、開発ツールでそれらを検査した後、罰金に見えます。

+0

バックボーンのcollection.resetはコレクションをリセットして、それに渡されたものにcollection.addを呼び出します。 Addは、問題が発生したときにエラーを投げることについてはかなり良いので、何も見ていないのには驚いています。追加を行う実際の行は 'splice.apply(this.models、[index、0] .concat(models));'です。あなたのモデルの完全なセットがそれをその点に作っているかどうかを見るために、直前に 'debugger'または' console.log(this.models、models、index) '行を追加してみてください。 – machineghost

答えて

28

おそらく、モデルのIDが同じであるためです。

バックボーンコレクションでは、重複するID値を持つモデルは許可されません。 (commitを参照してください)

+0

OPにエラーが出るはずですが "同じモデルをコレクションに2回追加することはできません" – machineghost

+0

彼は正しかった - 'set'の中に' id:key'を追加して修正しました。 – xil3

+1

@ machineloghost私が参照したコミットでエラーが発生しました – Paul

関連する問題