使用requirejs初始化快速单击

时间:2013-07-31 20:42:19

标签: cordova requirejs fastclick.js

我在fastclick中使用requirejs。 我收到以下错误:

Uncaught TypeError: Cannot set property 'trackingClick' of undefined 

在Fastclick.js第30行中执行:this.trackingClick = false;

在config.js中我运行了app.js:

require.config({
    paths: {
       fastclick:'fastclick'
    }    
)};
require(['app'], function (App) {
    App.initialize();
});

在我的app.js我这样做:

define(['fastclick'], function(fastclick){
    var app = { 
        initialize: function () {
            var attachFastClick = require('fastclick');
            attachFastClick(document.body);
        }
    }
    return app;
}    

浏览器启动正常,在调试器中正确实例化并解析了fastclick库,但Fastclick.js中仍然this无法解析。

我也试过fastclick(document.body);,但似乎没有任何效果。

有什么想法吗?

3 个答案:

答案 0 :(得分:7)

查看Fastclick代码,我发现以下功能有效: Fastclick.attach

所以,而不是打电话:

 var attachFastClick = require('fastclick');
        attachFastClick(document.body);

以下作品:

 fastclick.attach(document.body);

答案 1 :(得分:2)

在我的应用中,我只是使用下面的代码通过fastclick正确初始化我的应用。我删除了所有其他不相关的代码行,以使我的解决方案更加清晰

define([
    'fastclick',
], function(FastClick){
    var initialize = function(){
        new FastClick(document.body);
    }
    return {
        initialize: initialize
    };
});

答案 2 :(得分:1)

是的,就像dsheene所说,FastClick库将返回FastClick.attach仅用于Browserify或其他CommonJS风格。对于AMD风格,FastClick将返回完整的FastClick对象。

来自FastClick来源:

if (typeof define !== 'undefined' && define.amd) {
  // AMD. Register as an anonymous module.
  define(function() {
    'use strict';
    return FastClick;
  });
}

在你想要的app.js文件中。

define(['fastclick'], function(fastclick){
  var app = { 
    initialize: function () {
      var FastClick = require('fastclick');
      FastClick.attach(document.body);
    }
  }
  return app;
}