2016-04-19 1 views
1
fetch: function() { 
     var self = this; 
     self.each(function(track) { 
      if(track) { 
       track.destroy(); 
      } 
     }); 
     Backbone.sync('fetch', this, { 
      method: 'GET', 
      success: function(response) { 
       if (response) { 
        if(response.clips.length > 0) { 
         SpinnerOn(); 
         for (i = 0; i < response.clips.length; i++) { 
          self.loadcount++; 
          self.loadFile(response.clips[i]); 
         } 
        } 
       } 
      } 
     }); 
    } 

コレクションを空にしようとしていますが、コレクションの最初のレコードを空にしていません。上記は同期操作用です。データベースから保存されたデータをロードしています。バックボーンコレクションの空の問題

+0

* "は、コレクション内の最初のレコードを空にされていない" コレクション内のすべてのモデルを破壊します* - それは他のレコードを削除しますか?たぶん最初のものがあなたのフェッチの一部として戻ってくるのでしょうか? –

+0

'each()'は、イテレータが現在反復処理中のモデルを 'remove()'しているので、予期しない結果が生じることに注意してください。 (私はこれが奇妙な 'if(track)'を説明していると仮定していると仮定していると仮定します))while(this.length){this.at(0).destroy()} 'を使用します。さらに、 'destroy()'(モデルが永続化されている限り)は、モデルを削除し、非同期であるため、コードが多くの要求を撃ち、バックエンドが正しく処理できない可能性があります。これらの知見を調査する。 'loadFile()'の実装を追加してください。 –

答えて

1

@ try-catch-finallyユーザーからのコメント私は100%これを書いていますが、これはうまくいくでしょう。

fetch: function() { 
    var self = this; 
    while(self.length) { self.at(0).destroy() } 
    Backbone.sync('fetch', this, { 
     method: 'GET', 
     success: function(response) { 
      if (response) { 
       if(response.clips.length > 0) { 
        SpinnerOn(); 
        for (i = 0; i < response.clips.length; i++) { 
         self.loadcount++; 
         self.loadFile(response.clips[i]); 
        } 
       } 
      } 
     } 
    }); 
} 

一方(self.length){self.at(0).destroy()}これは