gpt4 book ai didi

javascript - $(this.el).find() 在事件处理程序中工作,而不是在初始化函数 (backbone.js) 中工作

转载 作者:行者123 更新时间:2023-11-30 05:56:25 25 4
gpt4 key购买 nike

我正在使用 backbone.js 创建一个包含 Like 按钮的 View 。这个View的模型包含属性is_liked,如果它的值为1,那么调用的函数setStateLike会改变的样式code>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's DOM-ready handler .

关于javascript - $(this.el).find() 在事件处理程序中工作,而不是在初始化函数 (backbone.js) 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com