【问题标题】:Why does Backbone's event obj have missing properties?为什么 Backbone 的事件 obj 缺少属性?
【发布时间】:2012-04-30 16:26:04
【问题描述】:

我正在开发一些拖放功能,并通过标准的 Backbone 方式附加事件:

events: { 
 'dragenter': 'dragEnter',
 'dragend': 'dragEnd'
 ....,
 .....
}

我注意到在我的函数中传递给它的 event 对象不包含 html5 规范中概述的某些属性。

具体来说,缺少dataTransfer obj。

我为demonstrate my issue 创建了一个快速演示。只需将文件或其他内容拖到其上即可在日志中查看。

我的问题是为什么会这样?我浏览了documentation,似乎找不到它。

【问题讨论】:

  • 尝试移除 Backbone 层,看看问题是否出在 jQuery 中:$("#dom-element").bind( "dragenter", function(event){ console.log( "event", event ); } );
  • @fguillen 是的,正常的 js 事件绑定也可以。我只是好奇它为什么会发生
  • 我不知道,Backbone 看起来像是委托给 jQuery 事件绑定 look this code,所以 Backbone 的事件系统应该和 jQuery 的事件系统一样工作:/

标签: jquery javascript-events backbone.js


【解决方案1】:

如果您使用 Backbone 事件,Backbone 会在实际事件之上放置一个层。 如果您想访问原始事件,您必须使用:event.originalEvent

在 originalEvent 中,您会找到 dataTransfer。

【讨论】:

  • 这比已经被接受的答案要好得多
【解决方案2】:

Backbone 事件实际上将事件绑定到您的 Dom 库(jQuery、Zepto ...),因此如果您想要可拖动事件,您应该加载 jqueryui

【讨论】:

  • 虽然它确实使用那些 DOM 操纵器绑定事件,但简单地添加 jqUI 并不能解决问题,至少在我的测试中没有。
  • 由于 dataTransfer 是原生的,您可以通过回调访问它:dragEnter: function(e) { dt = e.originalEvent.dataTransfer } 所以这就是我将事件绑定到 jQuery 的意思
  • 啊。甚至没有意识到originalEvent 的存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多