2016-07-12 3 views
1

Node.js用に設計され、パッケージ化されたJSライブラリを使用して、QMLで使用する(具体的にはProtoBuf library)。 ProtoBufライブラリはByteBuffer libraryに依存しています。QMLでのノードJSライブラリの使用

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で正しく動作するようにライブラリを変更する方法はありますか?

答えて

2

私は今、QMLは図書館、PBは、ライブラリのスクリプトが実行されたグローバルな範囲であることを原因と

声明

import "qrc:/scripts/protobuf.js" as PB 
を名前空間仕方ことを理解しています。

(global["dcodeIO"] = global["dcodeIO"] || {})["ProtoBuf"] = factory(global["dcodeIO"]["ByteBuffer"]); 

としてQMLで見つけることができます:

var ProtoBuf = PB.dcodeIO.ProtoBuf; 
console.log(ProtoBuf.loadProtoFile); 
//-> function() { [code] } 
ライブラリは、このコードに公開している '本物の' いるProtobuf、このように
関連する問題