4

我正在尝试将hammer.js 插件与require.js 一起使用,但我没有运气。

这是我的代码:

requirejs.config({
  paths: {
      "jquery": ('__proto__' in {}) ? "lib/zepto" : "lib/jquery",
      "hammer-jquery": "lib/jquery.hammer",
      "hammer-showtouches": "lib/hammer.showtouches",
      "hammer-fakemultitouch": "lib/hammer.fakemultitouch"
  },
  shim: {
      "jquery": {
          exports: "$"
      },
      "hammer-showtouches": {
          deps: [ "hammer-jquery" ],
          exports: "Hammer.plugins.showTouches"
      },
      "hammer-fakemultitouch": {
          deps: [ "hammer-jquery" ],
          exports: "Hammer.plugins.fakeMultitouch"
      }
  },
  waitSeconds: 30
});

requirejs(["jquery","hammer-jquery","hammer-showtouches","hammer-fakemultitouch"], function ($,Hammer) {
    $(function(){
      if(!Hammer.HAS_TOUCHEVENTS && !Hammer.HAS_POINTEREVENTS) {
            Hammer.plugins.showTouches();
            Hammer.plugins.fakeMultitouch();
          }
    });
});

这是错误:

未捕获的类型错误:无法读取未定义的hammer.showtouches.js:7 的属性“插件”

未捕获的类型错误:无法读取未定义的 require.js:8 的属性“插件”

未捕获的类型错误:无法读取未定义的hammer.fakemultitouch.js:7 的属性“插件”

未捕获的类型错误:无法读取未定义的 require.js:8 的属性“插件”

我试图将 Hammer 包含在 shim 配置中,但没有成功(没有必要,因为 jquery.hammer 的最新版本与 AMD 兼容)。

4

2 回答 2

2

您的问题似乎是您没有包含插件所需hammerjs库。hammerjs jquery

要解决此问题,您需要在requirejs路径中添加类似'hammer':'lib/hammerjs/dist/hammer.min',


此外,这里有一些关于我如何hammerjs使用requirejs.

就我而言,我希望它与backboneand一起使用requirejs。我用bower.

bower install --save hammerjs
bower install --save backbone.hammer

然后,我继续添加 RequireJS 配置:

  • 我注意到那jquery.hammer.js是 AMD 并且自动需要 jquery。它也默默地依赖于 Hammer。它修改 jquery 以支持 Hammer。不需要垫片。

  • 我注意到那hammerjs是 AMD 并自动导出 Hammer。不需要垫片。

  • 我注意到这backbone.hammer是 AMD 并且自动需要underscore,backbonehammer. 它修改了 Backbone 以支持 Hammer。不需要垫片。

因此,我的配置仅使用路径(因为不需要 shim 支持):

require.config({
    'baseUrl':'',
    'paths':{
        'underscore':'js/lib/underscore-amd/underscore-min',
        'backbone':'js/lib/backbone-amd/backbone-min',
        'jquery':'js/lib/jquery/jquery.min',
        'hammer':'js/lib/hammerjs/dist/hammer.min',
        'jquery-hammer':'js/lib/hammerjs/dist/jquery.hammer.min',
        'backbone-hammer':'js/lib/backbone.hammer/backbone.hammer'
    },
    shim:{
        'underscore': { exports: '_' },
        'backbone': { deps: ['underscore', 'jquery'], exports: 'Backbone' }
    }
});
于 2013-10-29T18:48:26.857 回答
0

包装 HammerJS 然后绑定到全局窗口:

// @path utils/hammer
define([
  'hammer'
], function (Hammer) {
  window.Hammer = Hammer;
});

然后让任何依赖于 HammerJS 的插件或模块依赖于utils/hammer.

于 2015-01-08T05:19:29.320 回答