Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干-将模型更改保存到本地对象_Javascript_Backbone.js_Architecture - Fatal编程技术网

Javascript 主干-将模型更改保存到本地对象

Javascript 主干-将模型更改保存到本地对象,javascript,backbone.js,architecture,Javascript,Backbone.js,Architecture,我正在构建一个应用程序,它将加载一个JSON文件,并使用该文件填充所有模型。我必须保留更改列表,然后在单击“发布”按钮后将其发回服务器 我认为结合使用Backbone.LocalStorage和使用模型更改事件来跟踪哪些模型发生了更改听起来是正确的,但如果听到有人这样做或解决了类似问题,这会有所帮助 这种方法有意义吗?有更好的方法吗?如果您试图跟踪单个更改,而不仅仅是保存前的最终状态,那么创建审核模型或类似的方法可能是一个好主意。您可以按照建议挂接到更改事件。可以随时使用标准版本的Backbon

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

我认为结合使用Backbone.LocalStorage和使用模型更改事件来跟踪哪些模型发生了更改听起来是正确的,但如果听到有人这样做或解决了类似问题,这会有所帮助


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

如果您试图跟踪单个更改,而不仅仅是保存前的最终状态,那么创建
审核
模型或类似的方法可能是一个好主意。您可以按照建议挂接到
更改
事件。可以随时使用标准版本的
Backbone.sync
将这些
Audit
模型保存到服务器。该模型可能看起来像这样:

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
});

谢谢安德鲁。这很有道理。我与我的团队的另一部分交谈,他们让我知道我可以发回我将用于创建模型的全部更新json。我使用的是localstorage,所以我可能会序列化这些模型以发回。我还需要跟踪更改,以便在发布前在应用程序中显示列表,这样您的解决方案听起来很棒。谢谢