Я смотрел на некоторые примеры приложения на основе Backbone.js Отказ Я замечаю, что в некоторых (таких как в этом примере ниже) функция подчеркивания _. Используется Bindall ()
:
initialize: function (args) {
_.bindAll(this, 'changeTitle');
this.model.bind('change:title', this.changeTitle);
},
, тогда как в других (например, приложение Ниже) не:
initialize: function() {
this.model.bind('change', this.render, this);
this.model.bind('destroy', this.remove, this);
},
Какова цель _. Bindall ()
в этом контексте, и это необходимо?
_.bindAll()
изменяет this
в именованных функциях, чтобы всегда указывать на этот объект, так что вы можете использовать this.model.bind()
. Обратите внимание, что во втором примере третий аргумент передается в bind()
; поэтому в этом случае использование _.bindAll()
не обязательно. В целом, это хорошая идея использовать для любых методов в модели, которые будут использоваться в качестве обратных вызовов для событий, чтобы вам было легче обращаться к this
.
In Detail: _.bind(ctx, 'method')
Принимает ваш метод, создает копию с контекстом, связанным с 'ctx', и добавляет копию как свойство.
Это обходной путь для jQuery.bind()
, не позволяющий передавать в контексте. JQ всегда будет вызывать обратные вызовы с неопределенным контекстом. Магистраль построена на jQuery.
См. Здесь: http://backbonejs.org/#FAQ-this
.