Javascript 主干收集计数器
我有一个可以在后端对一个集合进行分页的集合,所以onscroll我会对另一批项目进行排序。我知道服务器上的项目数。我正在寻找一种通过Javascript 主干收集计数器,javascript,backbone.js,Javascript,Backbone.js,我有一个可以在后端对一个集合进行分页的集合,所以onscroll我会对另一批项目进行排序。我知道服务器上的项目数。我正在寻找一种通过getCounter方法扩展我所有收藏的方法。其思想是最初设置服务器计数器,当用户从集合中添加或删除项目时,计数器将更新。什么是最好的方法 我认为问题在于,当我从服务器获取新项目时,add事件也会被触发。否则,我可以只绑定到add和remove事件。您需要控制哪些添加和删除应该计数,哪些不应该计数。我想到了两个选择 使用silent:true选项使所有不应计数的操作
getCounter
方法扩展我所有收藏的方法。其思想是最初设置服务器计数器,当用户从集合中添加或删除项目时,计数器将更新。什么是最好的方法
我认为问题在于,当我从服务器获取新项目时,
add
事件也会被触发。否则,我可以只绑定到add
和remove
事件。您需要控制哪些添加和删除应该计数,哪些不应该计数。我想到了两个选择
silent:true
选项使所有不应计数的操作静音,并将计数器连接到add
、remove
和reset
事件。这将对集合的一般使用造成一些限制,因为您不能在所有情况下都使用它们的事件添加
、删除
和重置
方法以接受一个额外选项,该选项告诉您是否应更新计数器。比如:
var PaginatedCollection = Backbone.Collection.extend({
initialize: function() {
this._counter = 0;
},
add: function(models, options) {
if(options && options.count)
this._counter += (_.isArray(models) ? models.length : 1);
Backbone.Collection.prototype.add.apply(this, arguments);
},
remove: function(models, options) {
if(options && options.count)
this._counter -= (_.isArray(models) ? models.length : 1);
Backbone.Collection.prototype.remove.apply(this, arguments);
},
reset: function(models, options) {
if(options && options.count)
this._counter = (_.isArray(models) ? models.length : 0);
Backbone.Collection.prototype.reset.apply(this, arguments)
}
});
并通过count:true
选项,此时应计算添加或删除的项目:
var SomeCollection = PaginatedCollection.extend({ });
var someCollection = new SomeCollection();
someCollection.add(model, { count: true });
someCollection.remove(model, { count: true });
(代码示例未经测试)在用于从集合中添加/删除项的方法的回调中创建某种计数器缓存,但我必须为每种集合执行此操作。我正在寻找类似计数器扩展的东西。因此,编写一个mixin,它可以保留所有您想要保留的计数器。你需要把它放在某个地方。很抱歉撞到你了,但我认为这根本不是一个好的做法。为了这种目的而扩展自然功能,主要是在自己的代码中,这听起来很难听——将业务规则与架构设计结合起来并不是最好的方法。今天,我们的听众可以聪明地为我们处理这些行为
this.listenTo(this.collection'add',this.increment)
就是一个例子,说明我们可以多么容易地处理这个问题。是的,我知道我们是在2014年,主干现在是更新的,但我发布这个给未来的学徒和参考。