微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更新Backbone.js集合而不擦拭旧模型

我有一个由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;
};

原文地址:https://www.jb51.cc/js/152877.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐