Backbone.js: _.bindall () в инициализации - почему это используется?

Я смотрел на некоторые примеры приложения на основе 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 () в этом контексте, и это необходимо?

25
задан nobody 10 September 2011 в 00:26
поделиться

2 ответа

_.bindAll() изменяет this в именованных функциях, чтобы всегда указывать на этот объект, так что вы можете использовать this.model.bind(). Обратите внимание, что во втором примере третий аргумент передается в bind(); поэтому в этом случае использование _.bindAll() не обязательно. В целом, это хорошая идея использовать для любых методов в модели, которые будут использоваться в качестве обратных вызовов для событий, чтобы вам было легче обращаться к this.

26
ответ дан 28 November 2019 в 21:41
поделиться
In Detail: _.bind(ctx, 'method')

Принимает ваш метод, создает копию с контекстом, связанным с 'ctx', и добавляет копию как свойство.

Это обходной путь для jQuery.bind(), не позволяющий передавать в контексте. JQ всегда будет вызывать обратные вызовы с неопределенным контекстом. Магистраль построена на jQuery.

См. Здесь: http://backbonejs.org/#FAQ-this

.
3
ответ дан 28 November 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: