【问题标题】:Associate hammerJS/jQuery events to default jQuery binding without $obj.hammer()将hammerJS/jQuery 事件关联到不带$obj.hammer() 的默认jQuery 绑定
【发布时间】:2013-11-01 03:40:39
【问题描述】:

我正在使用带有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);

这可能吗?

【问题讨论】:

    标签: jquery backbone.js requirejs marionette hammer.js


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 顺便说一句,这基本上就是jquery-hammer 插件(来自hammerJS 开发人员)所做的。 jquery-hammer 恰好是 backbone.hammer 的依赖项,OP 无法正常工作。
      猜你喜欢
      • 2012-02-23
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2011-01-01
      • 2010-11-29
      • 1970-01-01
      相关资源
      最近更新 更多