【问题标题】:How check several atrribute changes in Backbone?如何检查 Backbone 中的几个属性变化?
【发布时间】:2014-05-23 02:09:53
【问题描述】:

我有一个模型user,它有两个属性:名字和姓氏。 我想更新它,所以我显示了一个预先填写的表格,其中已经填写了姓名。之后我需要用代码保存更新模型,但在此之前我必须检查模型是否改变:

this.model.set("name", formData.name);
this.model.set("surname", formData.surname);
if (this.model.hasChanged()) {
    this.model.save();
}

考虑在from中仅更改名称的情况:

this.model.set("name", formData.name);
//this.model.hasChanged() -> true
this.model.set("surname", formData.surname);
//this.model.hasChanged() -> false
if (this.model.hasChanged()) {
    //so model do not changes at all :(
}

有没有办法检查所有模型属性是否已更改? (不一一)

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    我建议更改设置模型属性的方式,而是一次性设置它们。这将允许 change 事件仅在模型集操作期间 任何 属性发生变化时触发一次。

    this.model.set({
        name: formData.name,
        surname: formData.surname
    });
    
    if (this.model.hasChanged()) {
        // executes this code...
    }
    

    【讨论】:

      【解决方案2】:

      之后我需要用代码保存更新模型,但在此之前我 必须检查模型是否改变:

      为什么要显式检查model是否改变。你可以直接在model上绑定一个change事件,然后保存。在这种情况下,当且仅当模型(模型中的任何属性)发生更改时,它才会触发 change 事件。

      试试这个:

      this.model.on('change', function () {
          this.model.save();
      }, this);
      

      看看model.setevent

      【讨论】:

      • 因为每次更改模型属性时都会发送更改事件。例如,如果有 15 个属性,您的代码模型将被保存 15 次。这不是一个好习惯。
      • 感谢@Cherry 的评论。我担心的是检查if (this.model.hasChanged()) 为什么需要?此外,如果您一次使用整个哈希而不是一个属性设置模型,则 change 事件将仅触发一次。 This 是我的想法。再次感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多