我有一个应用程序,它包含一个Backbone.js集合和与服务器的实时连接.
每当任何客户端在集合中添加/删除/更新模型时,更新的集合将广播到所有其他客户端(不是delta;整个集合).
当从其他客户端处理此更新事件时,我发现更新集合的唯一方法是reset().不幸的是,这会擦除旧模型并创建新模型,以及所有与视图相关的副作用.
是否有一种Backbone认可的方式来更新维护和更新原始模型的集合(通过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;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3977 次 |
| 最近记录: |