我使用backbone.js創建包含Like
按鈕的視圖。此視圖的模型包含屬性is_liked
,如果其值爲1
,則調用的函數setStateLike
將更改Like
按鈕的樣式。
問題:我不能在initialize
函數中使用this.setStateLike()
來選擇按鈕。這樣做只是返回[]
。但是,當我將this.setStateLike
定義爲點擊事件處理程序時,選擇該按鈕的作用!陌生人的事情是,在initialize
內調用的this.setStateLike()
可以選擇$(this.el)
,但不是$(this.el).find()
!
任何想法這裏發生了什麼,它如何解決?謝謝!
PhotoListItemView = Backbone.View.extend({
tagName: 'div',
className: 'photo_box',
events: {
'click': 'setStateLike'
},
initialize: function() {
this.setStateLike();
},
render: function() {
$(this.el).html(this.template(this.model.toJSON()));
return this;
},
setStateLike: function() {
console.log($(this.el).find('#like')); // returns []
if(this.model.get('is_liked')) {
console.log($(this.el)); // returns correctly
console.log($(this.el).find('#like')); // returns []
// Change icon to Active state
$(this.el).find('#like.photo_btn').addClass('photo_btn_active').attr('id', 'unlike');
}
}
});
使用'this。$ el'代替'$(this.el)'來保存輸入 – Austin 2012-07-22 03:40:37
請注意,@奧斯汀建議*先分配*'this。$ el',然後稍後使用它代替$ this.el)'。這樣做的最好理由不是爲了節省擊鍵,而是爲了提高性能:將DOM元素包裝到jQuery對象中需要付出努力,最好是一次而不是一次又一次地完成。 – Matchu 2012-07-22 03:44:13
我很確定Backbone.View定義了'this。$ el'和'this.el',而不需要賦值。 – Austin 2012-07-22 03:54:29