Backbone.js没有注册Model.hasChanged事件

Bri*_*unt 3 javascript backbone.js

Backbone.js如果(并且仅当)数据发生了变化,我正试图在有"更改"事件的情况下获取一个View in 来保存.

长话短说,我在View上设置了一个'更改'事件,调用它:

function changed_event() {
  log.debug("Before: " + this.model.get('name')) // not 'contrived!'
  this.model.set({'name': 'contrived!'});
  log.debug("After: " + this.model.get('name')) // 'contrived!'

  if (this.model.hasChanged()) {
      alert("This is never called.");
  }
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么model.hasChanged()false当明确了模式已经改变.

我不确定其他信息是否必要,但如果有更多可能有用的信息,请发表评论,我会详细说明.

谢谢你的阅读.

Bar*_*art 10

通过调用model.set,您将触发更改事件..hasChanged()如果自上次更改事件以来模型已更改,则返回true .所以它将返回false,因为自更改事件以来没有任何更改.要获得所需的行为,请.set使用以下silent选项进行调用:this.model.set({'name': 'contrived!'}, {silent: true})

  • 这是正确的,但很容易被误解.Brian和我似乎都想要一个自上次同步以来发生变化的属性列表. (3认同)