我有进口JavaScript库一个QML文件:QML的JavaScript导入空
import "qrc:/scripts/protobuf.js" as PB
这个库modifies the 'global' object安装过程中。简单来说,JS库是:
.pragma library
(function(global){
global.dcodeIO = global.dcodeIO || {};
global.dcodeIO.ProtoBuf = {}; // In reality, a complex object
})(this);
在Windows和Linux上,它按预期工作;后来在我的QML文件中,我编写了var ProtoBuf = PB.dcodeIO.ProtoBuf;
,它发现dcodeIO
属性添加到'全局'对象,并正确给我我需要的对象。
但是,在另一个平台上,相同的代码不起作用。我得到一个错误,它cannot read property ProtoBuf of undefined
。我在我的QML中添加了调试行并参见:
console.log(PB.dcodeIO); //-> undefined
for (var k in PB) console.log(k,PB[k]); //-> (no enumerable properties logged)
然而,库中的JavaScript代码已加载并运行。如果我在上面链接的行之后加上console.log(global.dcodeIO)
,我会看到[object Object]
。
区别是什么?我如何确定为什么Qt运行我的JavaScript文件,但没有成功地将全局对象与PB
关联?
在哪个平台上不起作用? – Mitch
@Mitch它是在NVIDIA PX2上运行的NVIDIA V4L(Vibrante 4 Linux)。 FWIW我现在正在调试Qt开发人员的问题,目前还没有答案。 – Phrogz
Qt 5.9上的相同问题 – uralbash