2

ここに記載されている 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');
    }

});
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 に答える