我想使用为Node.js设计和打包的JS库,并将其与QML (特别是ProtoBuf库)一起使用。ProtoBuf库依赖于ByteBuffer库。
我编辑了bytebuffer.js和protobuf.js以添加.pragma library作为第一行。然后,在我的.qml中我有:
import "qrc:/scripts/bytebuffer.js" as BB
import "qrc:/scripts/protobuf.js" as PB
Window {
Component.onCompleted: {
console.log('PB', PB);
console.log('func',PB.loadProtoFile);
for (var k in PB) console.log(k,typeof PB[k],PB[k]);
console.log('done!')
}
}我看到的输出是:
qml: PB [object Object]
qml: func undefined
qml: done!因此,QML在某种意义上正在加载ProtoBuf库(我已经将调试消息放入该库中,并确认通用装载机正在运行并能够找到ByteBuffer),但它不是带有我期望的方法的对象,比如loadProtoFile()。
如何访问库公开的~真实ProtoBuf对象?或者我应该如何修改库以正确地使用QML?
发布于 2016-07-12 22:57:17
我现在明白了QML命名空间库的方式,这个语句
import "qrc:/scripts/protobuf.js" as PB使PB成为运行库脚本的全局范围。因此,库在此代码中公开的“真实”ProtoBuf:
(global["dcodeIO"] = global["dcodeIO"] || {})["ProtoBuf"] = factory(global["dcodeIO"]["ByteBuffer"]);可以在QML中找到以下内容:
var ProtoBuf = PB.dcodeIO.ProtoBuf;
console.log( ProtoBuf.loadProtoFile );
//-> function() { [code] }https://stackoverflow.com/questions/38340062
复制相似问题