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

时间:2012-07-22 03:33:57

标签: javascript jquery backbone.js underscore.js

我使用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');
        }
    }
});

1 个答案:

答案 0 :(得分:1)

如果您的脚本位于主体HTML的大部分之前,并且如果立即调用initialize函数,那就是您的问题:DOM实际上尚未构建,因此无法选择任何元素。在</body>末尾运行脚本,或使用jQuery's DOM-ready handler

相关问题