2

我正在尝试这里给出的主干.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');
    }

});
4

2 回答 2

5

事件针对您的<p>元素内的任何元素。它不是针对您的元素,即使您的元素是一个元素。<p>

尝试:

events: {
  'click': 'highlight'
}

以根元素为目标。

于 2012-06-04T19:08:46.970 回答
1

嗯...在您的渲染中,您将所有正文内容替换为 this.$el。我认为当您替换所有内容时,您已经有效地“解开”了事件哈希。所以在你完成追加之后,像这样调用 this.delegateEvents() :

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

这应该允许您单击段落标签。

于 2012-06-04T21:00:23.340 回答