RequireJS QCodeDecoder导出Uncaught TypeError:object不是函数

时间:2015-02-03 11:32:11

标签: javascript django requirejs

我试图在我的django项目中使用qcode-decoder作为libs之一(https://github.com/cirocosta/qcode-decoder/blob/master/src/qcode-decoder.js)来实现requirejs。 在html中我这样做:

<script src="{{STATIC_URL}}js/libs/require.js"></script>
<script src="{{STATIC_URL}}js/pages/pay_iframe.js"></script>

这是我的pay_iframe.js:

requirejs.config({
    baseUrl: '/static/js/pages',
    paths: {
        qcode_decoder: '../libs/qcode/qcode-decoder',
        porthole: '../libs/porthole',
        jquery: '../libs/jquery',
        pay_iframe: 'pay_iframe',
    },
    shim: {
        'qcode_decoder': {
            exports: 'QCodeDecoder',
        },
        'pay_iframe': {
            deps: ['jquery', 'qcode_decoder', 'porthole'],
        },
    }
});

require(['jquery', 'qcode_decoder', 'porthole'], function($, QCodeDecoder) {
    console.log(QCodeDecoder);
    var qr = new QCodeDecoder();
    if (!(qr.isCanvasSupported() && qr.hasGetUserMedia())) {
        ...
    }
    ...
});

一切似乎都按正确的顺序加载,但是当我尝试创建QCodeDecoder对象(在实现requirejs btw之前工作)时,我收到以下错误:

Uncaught TypeError: object is not a function

我想这是因为QCodeDecoder是一个对象(由console.log打印):

Object {imagedata: null, width: 0, height: 0, qrCodeSymbol: null, debug: false…}

但是这个对象不包含以后使用的函数(isCanvasSupported和hasGetUserMedia),所以我不能这样做:

var qr = QCodeDecoder;

它也不起作用。 也许我应该导出(在shim配置中)别的东西? 请帮帮我。

1 个答案:

答案 0 :(得分:1)

require更改为define即可解决问题。