コレクション モデルとビューのコード
Backbone.Collection.extend({
model: xModel,
initialize: function(url) {
this.targetUrl = url;
},
url: function () {
return this.targetUrl;
},
parse: function (data) {
return data.instances;
}
}
Backbone.Model.extend({
defaults: {
location: '',
xyz: ''
},
initialize: function (options) {
},
url: function () {
return this.get('location');
}
}
}
renderInstances: function () {
this.collection = new xyzInstanceCollection(instPath);
this.collection.fetch({
success: _.bind(
function (data) {
for (var i = 0; i < this.collection.length; ++i) {
var model = this.collection.at(i);
model.fetch({
success: _.bind(
function (data) {
/*Call a subView to run the data over a template
and display the instance fetched*/
}, this),
error:
function (e, response) {
/*Do Something else*/
}
});
}
}, this),
error:
function (e, response) {
/*Do Something*/
}
}
});
}
問題 1: 成功のコールバックから呼び出されたインスタンスのビューは、そのモデルのフェッチがデータを取得するとすぐにレンダリングを開始することを期待していましたが、Backbone.js は最初にすべての ajax 呼び出しをキューに入れます。完全なループの場合、これらすべての呼び出しがデータを返すと、ビューのレンダリングが開始されます。これは、同期または非同期フェッチに関係なく発生します。なぜですか?
問題 2: このループからすべてのモデルがフェッチされる前に更新ボタンが押されると、ブラウザーは通信でエラーを返します。ユーザーが結果を確認せずに別のページにルーティングしたい場合に、これらの呼び出しを中止する方法、モデル フェッチのループから数千の xhr が返される可能性があります。それらすべてを収集して中止を実行することはできません。より良い方法はありますか? 、 提案してください。