2011-12-19 5 views
2

This tutorial предполагает, что мы должны сделать _.bindAll, чтобы получить правильное значение this в наших функциях. Кажется, что _.bindAll больше не требуется с Магистралью. Следующий код регистрирует ту же вещь дважды:Имеет ли позвоночник _.bindВсе по умолчанию?

var TestView = Backbone.View.extend({ 
    initialize: function() { _.bindAll(this, 'func1'); }, 
    func1: function() { console.log(this); }, 
    func2: function() { console.log(this); } 
}); 
var testView = new TestView(); 

testView.func1(); 
testView.func2(); 

Я правильно предполагая, что bindAll больше не требуется, или я просто сделать глупую ошибку?

+1

'testView.func1();' не является хорошим тестовым примером, попробуйте его с некоторыми «событиями», чтобы узнать, что произойдет. [Официальные документы все еще говорят о 'bindAll'] (http://documentcloud.github.com/backbone/#FAQ-this), и я ничего не вижу в журнале изменений о привязке, которая больше не нужна. –

+0

Ваш пример будет работать без '_.bindAll', вам нужно использовать одну из функций в качестве обработчика события, чтобы увидеть эффект привязки. – Cobby

ответ

5

Это необходимо, когда метод вызывается из контекста класса. Поскольку вы все это понимаете в контексте, это не ошибка, в которой вы этого не нуждались.

Как упомянуто в документации для подчеркивания _.bindAll (http://documentcloud.github.com/underscore/#bindAll), это «очень удобно для связывания функций, которые будут использоваться в качестве обработчиков событий, которые иначе были бы вызываться с довольно бесполезной this.» Вы также использовали бы его для методов, где вам нужно создать обратный вызов.

Чтобы увидеть, как существуют различия для обратных вызовов, посмотрите на эту скрипку. http://jsfiddle.net/joshvermaire/YQdZu/

Смежные вопросы