Какие события запускаются при изменении модели в Backbone? - PullRequest
0 голосов
/ 04 февраля 2012

Помогите мне, пожалуйста ... Я пробую это:

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

И когда я что-то меняю внутри модели, у меня запускается двойной обработчик.

Но когда я изменил событие для привязки:

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

Все хорошо. Зачем? Какова природа этого?

1 Ответ

1 голос
/ 04 февраля 2012

Одно изменение атрибута a модели вызовет два события:

  • change
  • change:a

и привязка к 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 события.

Демо: http://jsfiddle.net/ambiguous/wnmXe/

...