複数の Backbone.Collection で再利用できるように、いくつかの共通モジュールを作成しようとしていますが、次の問題で立ち往生しています。
アプリケーション テンプレートとしてhttps://github.com/backbone-boilerplate/backbone-boilerplateをダウンロードしたので、/app/modules に次の js を作成しました。
- /app/modules/collection.js (他のすべてのコレクションに共通のもの)
- /app/modules/users.js (collection.js から拡張されたユーザー コレクション)
/app/modules/collection.js のコードは次のとおりです。
define([
"backbone"
],
function(Backbone) {
var collection = Backbone.Collection.extend({
pagination : { total : 0 },
parse: function( response ) {
if ( response.data ) {
self.pagination.total = response.total;
return response.data;
}
return response;
},
});
return collection;
});
/app/modules/users.js のコードは次のとおりです。
define([
"backbone",
"modules/collection"
],
function(Backbone, Collection) {
var users = Collection.extend({
self: null,
initialize: function( models, options ) {
self = this;
},
getData: function() {
this.fetch({
success: function() {
console.log('ok');
},
error: function() {
console.log('error');
}
});
}
});
return users;
});
私の /app/router.js では、コードは次のとおりです。
define([
"app",
"modules/users"
],
function(app, Users) {
var Router = Backbone.Router.extend({
routes: {
"": "index"
},
index: function() {
var usersA = new Users([], {
url: 'http://test.test.test./users_a.html'
});
usersA.getData();
var usersB = new Users([], {
url: 'http://dev.digbil.com/users_b.html'
});
usersB.getData();
}
});
return Router;
});
http://test.test.test./users_a.htmlは 20 レコードを返すと想定しているため、usersA.pagination.total には値 20 が含まれている必要があります。
http://test.test.test./users_b.html 50 レコードを返すと仮定すると、usersA.pagination.total には値 50 が含まれている必要があります。
私の問題は、usersA.pagination.total の両方に値 50 が含まれていることです。2 番目のインスタンスが最初のインスタンスを上書きしているように見えますか?
しかし、userA.models と userB.models の両方に正しいデータ レコードが含まれており、usersA コレクションに 20 人のユーザー、userB コレクションに 50 人のユーザーが表示されています。
次のように個別に実行すると:
define([
"app",
"modules/users"
],
function(app, Users) {
var Router = Backbone.Router.extend({
routes: {
"": "index"
},
index: function() {
var usersA = new Users([], {
url: 'http://test.test.test./users_a.html'
});
usersA.getData();
}
});
return Router;
});
userA.pagination.total には正しい値 20 が含まれています
define([
"app",
"modules/users"
],
function(app, Users) {
var Router = Backbone.Router.extend({
routes: {
"": "index"
},
index: function() {
var usersB = new Users([], {
url: 'http://dev.digbil.com/users_b.html'
});
usersB.getData();
}
});
return Router;
});
userB.pagination.total には正しい値 50 が含まれています
どこが間違っているのかわかりませんか?
[編集] 一意のインスタンスごとに異なるページネーション値を持つようにコードを変更するにはどうすればよいですか?
[編集] http://jsfiddle.net/mcchin/Bb5sq/クイックモックアップ
[編集] 問題は「解析」機能にあるようですか?