请帮帮我......我试试这个:
model.bind 'all', this.console, this
当我改变模型中的某些内容时,我会对我的处理程序进行双击。
但是当我改变绑定事件时:
model.bind 'change', this.console, this
一切都好。为什么?这是什么性质?
答案 0 :(得分:1)
对模型的 a
属性进行一次更改会触发两个事件:
change
change:a
和binding to all
表示将同时调用您的事件处理程序:
当任何事件发生时,将触发绑定到特殊
"all"
事件的回调,并将事件的名称作为第一个参数传递。
如果您只绑定到change
事件,则只会调用您的处理程序以查看整个“模型已更改”部分的事件,并且您将看不到特定于此的change:a
仅仅改变了那个属性。
例如,鉴于此:
class M extends Backbone.Model
m = new M
m.on 'all', (ev) -> console.log ev
m.set a: 'b'
您将在控制台中获得change
和change:a
。
演示:http://jsfiddle.net/ambiguous/yRDjd/
但如果你这样做:
class M extends Backbone.Model
m = new M
m.on 'change', -> console.log 'the model changed'
m.on 'change:a', -> console.log 'a changed'
m.set a: 'b'
您会看到每个change
事件的单独消息。