我试图在我的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配置中)别的东西? 请帮帮我。
答案 0 :(得分:1)
将require
更改为define
即可解决问题。