使用带有QML

时间:2016-07-12 22:49:45

标签: javascript node.js qml

我想为Node.js设计和打包一个JS库,并将其与QML(特别是ProtoBuf library)一起使用。 ProtoBuf库依赖于ByteBuffer library

我修改了bytebuffer.jsprotobuf.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库(我已将调试消息放入该库并确认generic loader正在运行且能够找到ByteBuffer),但是它不是methods that I expect的对象,例如loadProtoFile()

如何访问库公开的〜真实ProtoBuf对象?或者我应该如何修改库以正确使用QML?

1 个答案:

答案 0 :(得分:2)

我现在明白了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] }