2012-02-03 60 views
0

請幫助我......我試試這個:Backbone中的模型更改引發了哪些事件?

model.bind 'all', this.console, this 

當我改變模型的內在的東西,我有我的處理程序的雙重射擊。

但是,當我綁定更改事件:

model.bind 'change', this.console, this 

一切正常。爲什麼?這是什麼性質?

回答

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' 

你會得到在控制檯changechange: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事件。

演示:http://jsfiddle.net/ambiguous/wnmXe/

+0

難以置信的答案,一如往常。謝謝! – ValeriiVasin 2012-02-04 00:15:39

相關問題