骨干查看事件得到适当的目标(Backbone View event getting the prop

2019-09-16 10:34发布

考虑下面这个简单的HTML:

<div class="someContainer">
  <h5>Some other information</h5>
</div>

而下面的骨干观点:

var view = Backbone.View.extend({
  events: {
   'click .someContainer': performAction
  },
  performAction: function (evt) { 
    // Do things here
  } 
});

我发现自己做下面的代码位颇有几分,这似乎是一个代码气味给我。 是不是我做错了,或者有更好的方式来做到这一点?

...performAction: function (evt) { 
 // Check to see if the evt.target that was clicked is the container and not the h5 (child)

 if ($(evt.target).hasClass('someContainer')) { 
  // Everything is ok, the evt.target is the container
 } else { 
  // the evt.target is NOT the container but the child element so...
  var $container = $(evt.target).parent('.someContainer');

  // At this point I now have the correct element I am looking for
 }
}

这工作,很明显,但我不知道这是很好的代码编写随处可见。 我可以让我可以只调用一个方法,但我不知道,其实校正代码味道,它只是外包到其他地方。

Answer 1:

你可以使用evt.currentTarget代替:

该事件冒泡相内的电流的DOM元素。

演示: http://jsfiddle.net/ambiguous/UgA5M/

或者你可以使用$container = $(evt.target).closest('.someContainer')而不必担心嵌套。

演示: http://jsfiddle.net/ambiguous/B49LG/

哪种方法您使用取决于你的具体情况。 如果你有某种形式的控制click处理,那么closest可能会更有意义; 如果你真的想你已经绑定你的点击处理程序的元素(或认为你有, 这是所有基于delegate毕竟),然后使用currentTarget



文章来源: Backbone View event getting the proper target