2013-07-31 55 views
3

我使用requirejs和fastclick。 我得到以下錯誤:用requirejs初始化fastclick

在Fastclick.js線30確實
Uncaught TypeError: Cannot set property 'trackingClick' of undefined 

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; 
}  

瀏覽器啓動正常,並在調試ger fastclick庫已正確實例化並解析,但仍無法解析Fastclick.js中的this。我也試過fastclick(document.body);但它似乎沒有任何影響。

任何想法?

回答

7

通過Fastclick碼的樣子,我發現了以下的功能,其工作原理: Fastclick.attach

所以,與其呼籲:

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

以下工作:

fastclick.attach(document.body); 
+0

感謝這對我有效 –

2

在我的應用程序,我只需使用下面的代碼,用fastclick正確初始化我的應用程序。我刪除了所有的代碼無關的其他行,以使我的解決方案更加清晰

define([ 
    'fastclick', 
], function(FastClick){ 
    var initialize = function(){ 
     new FastClick(document.body); 
    } 
    return { 
     initialize: initialize 
    }; 
}); 
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; 
}