2

我正在使用backbone.js 创建一个包含Like按钮的视图。这个 View 的模型中包含 属性is_liked,如果它的值为1,那么setStateLike调用的函数会改变Like按钮的样式。

问题:我无法选择功能中使用的this.setStateLike()按钮initialize。这样做只会返回一个[]. 但是,当我定义this.setStateLike为单击事件处理程序时,选择按钮有效!奇怪的是,this.setStateLike()被调用的 insideinitialize是可以选择$(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');
        }
    }
});
4

1 回答 1

1

如果您的脚本出现在主体 HTML 的大部分之前,并且如果该initialize函数被立即调用,那就是您的问题:DOM 尚未真正构建,因此无法选择任何元素。要么在末尾运行脚本</body>,要么使用jQuery 的 DOM-ready 处理程序

于 2012-07-22T03:39:08.557 回答