Ответ 1
this.$
ограничивает контекст jQuery для элемента view, поэтому операции выполняются быстрее.
Дополнительно, this.$('.todo-item')
не будет находить ваши элементы с классом todo-item
вне вашего элемента вида.
В главной todo demo в коде есть несколько мест, где используется _.bindAll(this,...)
. В частности, он используется в функции initialize
для обоих представлений. Насколько я могу судить, необходимо сделать следующее:
this.$('.todo-content').text(content);
Но зачем нужно делать выше, когда это можно сделать:
$('.todo-content').text(content);
?
this.$
ограничивает контекст jQuery для элемента view, поэтому операции выполняются быстрее.
Дополнительно, this.$('.todo-item')
не будет находить ваши элементы с классом todo-item
вне вашего элемента вида.
_.bindAll( this, ... )
необходим не только для this.$( selector ).doSomething()
, но в целом, чтобы убедиться, что this
в вашем методе просмотра всегда указывает на само представление.
Например, если мы хотим обновить наше представление при изменении модели, мы привязываем метод view render
к событию модели change
:
initialize: function() {
this.model.bind( 'change', this.render );
},
Без _.bindAll( this, 'render' )
, когда изменение модели this
в render
будет указывать на модель, а не на представление, поэтому у нас не будет ни this.el
, ни this.$
, либо каких-либо других свойств представления доступны.
По сравнению с Backbone 0.5.2 вам больше не нужно использовать _.bindAll(this...) в ваших представлениях, чтобы установить контекст функций обратного вызова bind, так как теперь вы можете передать третий аргумент для привязки(), который установит контекст (т.е. "this") обратного вызова.
Например:
var MyView = Backbone.View.extend({
initialize: function(){
this.model.bind('change', this.render, this);
},
render: function(){
// "this" is correctly set to the instance of MyView
}
});