Backbone:获取触发事件的视图元素

r7knjye2  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(133)

我有一个这样的模板:

<a class="btn btn-info btn-small edit"  model-id="<%= model.id %>" href="">
  <i class="icon-pencil icon-white"></i>
  edit
</a>

视图定义如下:

src.views.WinesView = Backbone.View.extend({
  [...]
  events: {
    'click a.edit': 'edit'
  },

  edit: function(e) {
    e.preventDefault();
    var a = $(e.target);
    var id = a.attr('model-id');
    app.edit(id);
  },
  [...]

如果用户单击“edit”文本,则一切正常,但是如果用户单击图标-铅笔图标(标记的内容),则正确地引发事件,但是e.target指向i标记,而不是a。
实际上,我想要的是,如果我绑定到的标记中的任何标记触发了一个事件,我希望该事件被引发,并轻松地获得对我从 Backbone.js 绑定的元素的引用...
我可以用以下方法解决:

edit: function(e) {
  e.preventDefault();
  var a = $(e.target);
  if (a[0].tagName!=='A') { a = a.parent(); }
  var id = a.attr('model-id');
  app.edit(id);
},

但我想知道是否有更好、更优雅、更通用的方法来实现它...

14ifxucb

14ifxucb1#

查看jQuery's $.closest() method

edit: function(e) {
  e.preventDefault();
  var a = $(e.currentTarget).closest('a');
  var id = a.attr('model-id');
  app.edit(id);
},
5q4ezhmt

5q4ezhmt2#

您可以使用这种方法从模型中获取属性值

edit: function(e) {
  e.preventDefault();

  var id = this.model.get("model.id");

  app.edit(id);
},

如果需要从元素获取HTML属性

$(e.currentTarget).attr("title");

相关问题