Backbone.js事件处理程序无法正常工作

时间:2012-06-04 18:57:01

标签: javascript backbone.js event-handling

我正在尝试给出here的backbone.js示例,然后尝试自己编写一些代码。

由于某种原因,我附加到事件'click p'的事件处理程序无效。单击段落标记时,为什么“突出显示”功能没有执行?

var ItemView = Backbone.View.extend({
    tagName : 'p',

    events: {
        'click p': 'highlight'
    },

    initialize: function(){
        console.log("An object of ItemView was created");
        _.bindAll(this, 'render', 'highlight');

        this.render();   
    },

    render: function(){
        this.$el.text(this.model.get('content'));
        $('body').append(this.$el);
        return this;
    },

    highlight: function(){
        console.log('clicked');
    }

});

2 个答案:

答案 0 :(得分:5)

事件它定位到 root 元素中的任何<p>元素。即使您的 root 元素是<p>元素,它也不会以 root 元素为目标。

尝试:

events: {
  'click': 'highlight'
}

定位 root 元素。

答案 1 :(得分:1)

嗯...在你的渲染中,你用这个替换所有的身体内容。$ el。当你替换所有内容时,我认为你已经有效地“取消了”事件哈希。所以在你执行追加之后,像这样调用this.delegateEvents():

render: function(){
    this.$el.text(this.model.get('content'));
    $('body').append(this.$el);
    this.delegateEvents();
    return this;
}

这应该允许您点击段落标记。