我有一个由Backbone.js集合和实时连接到服务器的应用程序.
每次任何客户端在集合中添加/删除/更新模型时,更新的集合将被广播到所有其他客户端(而不是三角形;整个集合).
从其他客户端处理此更新事件时,我发现更新集合的唯一方法是reset().不幸的是,这会擦除旧的模型并创建新的模型,以及所有视图相关的副作用.
是否有一种骨干认证的方法来更新维护和更新原始模型(按ID比较)的集合,仅在必要时才创建/删除?
UPDATE Backbone已经添加了Collection.set方法,它能够更新现有的模型.
解决方法
我去的解决办法是:
Backbone.Collection.prototype.update = function(colIn){ var ids = []; _(colIn).each(function(modIn){ var existing = this.get(modIn); // update existing models if (existing) { existing.set(modIn); } // add the new ones else { this.add(modIn); } ids.push(modIn.id); },this); // remove missing models (optional) var toRemove = this.reject(function(model){ return _(ids).include(model.id); }); this.remove(toRemove); return this; };