【问题标题】:Backbone event on button executing for all elements in the page为页面中的所有元素执行的按钮上的主干事件
【发布时间】:2013-02-28 13:26:10
【问题描述】:

我有一个从 Backbone.View 扩展而来的视图类,在模型中我有以下按钮:

<a class="comment-btn delete-comment">Delete</a>

我将方法与按钮相关联,如下所示:

events:{
"click delete-comment":"deleteComment"
}

问题是当我单击一个按钮时,该方法会针对页面中的每个可用评论执行。

我怎样才能让它只在被点击的项目上执行?

【问题讨论】:

  • 如果您能提供有关您的视图、模型等的更多信息,那就太好了。
  • 点击事件中的代码真的执行了吗?你能把events hash 改成"click .delete-comment":"deleteComment" 试试看吗?

标签: javascript jquery model-view-controller backbone.js


【解决方案1】:

对于这种场景,我通常会为每个按钮添加一个“data-id”属性,并使用它来确定要操作的评论。

例如,如果按钮被定义为:

<a class="comment-btn delete-comment" data-commentId="1">Delete</a>

然后,事件处理程序将通过评估事件源来确定正确的注释。以下示例假定使用 jQuery:

deleteComment: function(event, args) {
   var id = $(this).data("commentId");
   ...
}

【讨论】:

  • 事件仍然会触发视图,但不是吗?只是可以通过ID过滤做什么?
  • 是的,这只会让您过滤干净,正如我在评论中所说,您的 Backbone 解决方案更好。
【解决方案2】:

你的观点是什么样的? el: 设置为什么?

事件的范围应该是当前视图。

【讨论】:

  • 在使用 Backbone 时,每个评论都有一个单独的 View 实例(这将始终为按钮事件处理程序提供正确的范围)是比我更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-09
  • 2014-09-10
  • 2013-12-28
  • 1970-01-01
相关资源
最近更新 更多