使用带有QML的Node JS库
我想要一个为Node.jsdevise和打包的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库(我已经把debugging信息放在那个库中,并且确认了通用加载器正在运行并且能够findByteBuffer
),但是它不是我期望的方法的对象,比如loadProtoFile()
。
我如何得到库暴露的真实ProtoBuf
对象? 或者我应该如何修改库以正确使用QML?
我现在明白了QML命名空间库的方式,声明
import "qrc:/scripts/protobuf.js" as PB
导致PB
成为库脚本运行的全局范围。 因此,图书馆在这个代码中暴露的“真实的”ProtoBuf:
(global["dcodeIO"] = global["dcodeIO"] || {})["ProtoBuf"] = factory(global["dcodeIO"]["ByteBuffer"]);
可以在QML中find:
var ProtoBuf = PB.dcodeIO.ProtoBuf; console.log( ProtoBuf.loadProtoFile ); //-> function() { [code] }