1

我正在使用带有hammerJS 实现的Backbone.Marionette 和RequireJS,并尝试使用backbone.hammer,但在ItemView 中出现以下错误:

Uncaught TypeError: Object [object Object] has no method 'undelegateHammerEvents'

我不确定为什么会发生这种情况,可能是我不正确的 Backbone.View 扩展或不正确的 require 依赖委托。我不知道。但是由于这个原因,我想使用它的默认事件绑定将锤子事件绑定到 jQuery,这样我就可以执行以下操作:

$('.myElement').on('dragstart', handler);

而不是:

$('.myElement').hammer().on('dragstart', handler);

这可能吗?

4

2 回答 2

1

这个答案可能对您有所帮助有点晚,但也许其他人可以受益。

您需要确保在 Marionette之前加载了backbone.hammer (并且只需要加载一次)。骨干.hammer (听起来很痛苦,不是吗?)“就地”扩展(即直接修改)Backbone.View——您可能知道,它是Marionette.View.

因此,如果 Marionette在backbone.hammer之前Marionette.View加载,将扩展“处女”Backbone.View而不是您想要的hammer-ified 版本,并且backbone.hammer 的修改将有效丢失(除非您Backbone.View直接使用a)。

在您发布问题的前一天,backbone.hammer 的同样问题被报告为一个错误。请参阅此处的讨论:

https://github.com/wookiehangover/backbone.hammer/issues/2

有多种方法可以确保在Marionette之前同步加载backbone.hammer。最简单(也是最粗略)的方法是简单地编辑 Marionette 的源代码以添加backbone.hammer 作为依赖项。

于 2015-04-08T23:44:34.037 回答
0

您可以尝试覆盖 jQuery 的“on”方法:

var originalOn = $.fn.on;
$.fn.on = function() {
  return originalOn.apply(this.hammer(), arguments);
}

然后你可以像你描述的那样使用它,每次调用都没有“hammer()”

于 2013-11-02T15:56:22.873 回答