$(this.el).find()在事件处理程序中工作,而不是在初始化函数(主干.js)中工作
$(this.el).find() works in event handler, not in initialize function (backbone.js)
我正在使用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');
}
}
});
如果您的脚本位于主体HTML的主体之前,并且initialize
函数被立即调用,那么问题就出在您身上:DOM实际上还没有构建,因此无法选择任何元素。要么在</body>
的末尾运行脚本,要么使用jQuery的DOM就绪处理程序。
相关文章:
- 使用javascript函数在页面初始化后加载jquery
- 未捕获错误:无法在初始化之前调用方法;
- 如何在剑道网格初始化后设置pageSizes
- React redux初始化功能,无论状态变化如何
- 为什么可以't Protractor在自动初始化的Angular网站上查找Angular
- 尝试初始化()Spine's控制器和故障
- Angular.js延迟控制器初始化
- $(this.el).find()在事件处理程序中工作,而不是在初始化函数(主干.js)中工作
- 为什么这个对象初始化工作
- jQuery sortable 无法与水平列表正常工作,如果列表在初始化之前为空
- 在javascript中初始化对象;t在编译时工作
- 位置选择器无法在谷歌地图初始化中工作
- ngRoute工作,但我想切换到ui-router..现在我的应用程序似乎没有初始化
- Valums qq.当FileUploader在ajax加载按钮后初始化时,它不工作
- 初始化Cycle2插件在Windows和OSX上的工作方式不同
- 烬应用程序库初始化不工作
- 为什么剑道隐藏场的验证.UI javascript模板在模板上初始化时不工作
- 如何让这个AngularJS控制器工作($scope变量没有在控制器中初始化)
- 在事件回调函数中初始化时,jQuery插件不工作
- 初始化嵌套表单的对象不工作