如何使用Backbone.js停止事件传播?

Gun*_*ium 36 javascript events backbone.js

使用Backbone.js视图,说我想要包含以下事件:

    events: {
        'click a': 'link', 
        'click': 'openPanel' 
    }
Run Code Online (Sandbox Code Playgroud)

单击链接时,如何避免触发openPanel.我想要的是有一个可以触发动作的可点击框,但是这个框可以包含应该触发其他动作的元素,而不是父动作.想想例如Twitter.com,以及推文/右侧面板中的链接.

Tim*_*nks 49

我一直在使用e.stopImmediatePropagation();,以防止事件传播.我希望有一个更短的方法来做到这一点.我想回归虚假; 但那是因为我对jQuery很熟悉


jsp*_*ner 21

JQuery preventDefault方法也是一个不错的选择.

    window.LocationViewLI = Backbone.View.extend({
        tagName: "li",
        template: _.template('<a href="/locations/<%= id %>"><%= name %></a>'),

        events: {
            "click a": "handleClick"
        },      
        handleClick: function(event) {
            event.preventDefault();
            console.log("LocationViewLI handleClick", this.model.escape("name") );
            // debugger;
        },
        ...
Run Code Online (Sandbox Code Playgroud)

  • 但这没有相同的行为.`preventDefault`阻止用户进入链接的href.`stopImmediatePropagation`允许用户按预期转到链接的href,但是阻止click事件传播到外部处理程序. (3认同)

Gab*_*mbe 6

每个事件处理程序在触发时都会传递一个事件对象.在处理程序中,您需要利用jQuery的event.stopPropagation()方法.例如:

link: function(event) {  
  //do some stuff here
  event.stopPropagation();
}
Run Code Online (Sandbox Code Playgroud)

  • 似乎这不起作用,可能是由于事件的约束方式:http://api.jquery.com/event.stopPropagation/ (4认同)