Backbone - 将模型更改保存到本地对象

时间:2014-05-05 20:28:07

标签: javascript backbone.js architecture

我正在构建一个应用程序,它将加载一个JSON文件并使用它来填充所有模型。我必须保留一个更改列表,然后在单击“发布”按钮后将其发回服务器。

我认为结合使用Backbone.LocalStorage并使用模型更改事件来跟踪哪些模型的更改听起来是正确的,但它有助于听到那些沿着这条路走下去或者解决类似问题的人!

这种方法有意义吗?还有更好的吗?

1 个答案:

答案 0 :(得分:2)

如果您在保存之前尝试跟踪个别更改而不仅仅是最终状态,那么创建Audit模型或类似的模型可能是个好主意。您可以按照建议挂钩change个事件。可以使用Audit的标准版本(或某些批量修改)将这些Backbone.sync模型保存到服务器。该模型可能如下所示:

var Audit = Backbone.Model.extend({
  defaults : {
    auditableType: "", auditableId: null, auditedChanges : ""
  },
  paramRoot : "audit"
});
var Audits = Backbone.Collection.extend({
  model : Audit
});

然后创建一个模型原型,所有审计模型都可以从以下地址扩展:

var audits = new Audits();
var AuditedModel = Backbone.Model.extend({
  initialize : function (options) {
    this.listenTo(this, "change", function (model, options) {
      audits.add({
        auditableType : this.paramRoot,
        auditableId : this.id,
        auditedChanges : this.changed
      });
    });
  }
});

现在只需从AuditedModel扩展您想要跟踪更改的任何模型。

var User = AuditedModel.extend({
  paramRoot : "user",
  // Do whatever
});