我使用backbone.js创建一个包含Like
按钮的视图。此视图的模型包含属性is_liked
,如果其值为1
,则调用的函数setStateLike
将更改Like
按钮的样式。
问题:我无法使用this.setStateLike()
功能中的initialize
选择按钮。这样做只会返回[]
。但是,当我将this.setStateLike
定义为单击事件处理程序时,选择按钮会起作用!更奇怪的是,在this.setStateLike()
内调用的initialize
能够选择$(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');
}
}
});
答案 0 :(得分:1)
如果您的脚本位于主体HTML的大部分之前,并且如果立即调用initialize
函数,那就是您的问题:DOM实际上尚未构建,因此无法选择任何元素。在</body>
末尾运行脚本,或使用jQuery's DOM-ready handler。