【问题标题】:Backbone Model save on change loops between client and server主干模型保存客户端和服务器之间的更改循环
【发布时间】:2013-04-01 18:54:57
【问题描述】:

在我的主干模型中,当发生更改事件时,我会调用 save。

myModel = Backbone.View.extend({

  initialize: function() {
    var self = this;
    self.model.on("change", function() { self.model.save(); });
  }

});

从 Backbone 文档中,我了解到 Backbone 期望从服务器获取一个 json 对象。

所以我将模型发回给客户。然后主干更新模型,这会再次触发更改事件,这会导致它再次重新保存。

防止这种行为的推荐方法是什么?

【问题讨论】:

  • Change 将模型作为第一个参数传入,因此您可以将处理程序简化为:function(model) { model.save(); }(这样您就不必为self 操心了)。

标签: javascript backbone.js


【解决方案1】:

通常在 Backbone 中,当您不希望操作产生副作用时,您只需传递一个 silent: true 选项。例如:

self.model.on("change", function() { self.model.save({silent: true}); });

我没有进行测试以确保这可以解决您的问题,但我怀疑它会。

【讨论】:

  • 它似乎对我有用,除了我使用了 self.model.save(null, {silent: true})。原因在这个question讨论。
【解决方案2】:

更简洁的写法是:

//inside you model
initialize: function () {
    this.on('change',function(){ this.save(null,{silent: true}); });
}

如文档 backbonejs.org/#Model-save 中所述。

第一个参数是属性,第二个是选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 2023-03-12
    • 2011-02-10
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多