我正在尝试创建一些通用模块,以便可以在多个Backbone.Collection上重用它,但我遇到了以下问题。
我已将https://github.com/backbone-boilerplate/backbone-boilerplate下载为我的应用程序模板,因此在/ app / modules中,我创建了以下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,好像第二个实例正在覆盖第一个实例?
但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/快速模型
[编辑]似乎问题在于“解析”功能?
答案 0 :(得分:1)
这是javascript对象的常见行为。在这里,您必须在每个集合中设置初始分页值pagination : { total : 0 }
。
扩展集合时,它不会创建副本,而是创建pagination
值的引用。