2017-02-21 7 views
0

requireを使用してprotobuf jsファイルをロードしようとしていますが、コンソールで次の例外が発生しています。ここでキャッチされていないエラー:モジュール名 "aaa_bbb_1_pb"がまだコンテキストのために読み込まれていません:_。

02-21 11:18:06.445 9130-9130/com.p.protoextensiontest I/chromium: [INFO:CONSOLE(5)] "Uncaught Error: Module name "js/proto/data_main_1_pb" has not been loaded yet for context: _. Use require([]) 
http://requirejs.org/docs/errors.html#notloaded", source: file:///android_asset/www/js/require.js (5) 
"Uncaught Error: Mismatched anonymous define() module: function p(){ 

はindex.jsここ

var proto = require('js/proto/aaa_bbb_1_pb'); 

function onCreate(){ 
    console.log("in onCreate"); 
    parseProto(); 
} 
function parseProto(){ 
    var name = proto.person.personName; 
} 

の私のコードで私のindex.htmlには、私はJavaScriptとnode.js.に初心者です

<head> 
    <title> Testing proto extension</title> 
    <script src="js/require.js"></script> 
    <script src="js/google-protobuf.js"></script> 
    <script src="js/index.js"></script> 

</head> 
<body> 
    <button type="button" onclick="onCreate()"> Create Data</button> <br/> 
</body> 

です任意の参照を提供してください。

答えて

1

index.jsに表示されるモジュールはCommonJS形式です。ラッパーを持たず、単一の文字列引数を含むrequire呼び出しを行います。

ただし、RequireJSを使用してロードしています。 RequireJSは、AMDモジュールローダーであり、CommonJSモジュールローダーではありません。 require AMDフォーマットを使用するための呼び出しを完全に書き直す必要はありませんが(require呼び出しと依存関係の配列とコールバック)、少なくともdefineコールでモジュールのコードをラップする必要があります。

define(function (require) { 
    var proto = require('js/proto/aaa_bbb_1_pb'); 

    function onCreate(){ 
     console.log("in onCreate"); 
     parseProto(); 
    } 

    function parseProto(){ 
     var name = proto.person.personName; 
    } 
} 

なお、onclick=onCreate()はまだ動作しません。モジュールを使用する目的の1つは、すべてをグローバルな空間に置くことを避けることです。だからonCreateonclickにアクセスできません。アクセシブルにするための最小限の方法は、関数の定義の後にwindow.onCreate = onCreateを追加することですが、これはお勧めしません。初期化時にボタンオブジェクトで呼び出すことができ、addEventListener("click", onCreate)を呼び出すエクスポートされた関数を追加するか、ページ上の特定の要素(ID、クラス名など)を検索してaddEventListener("click", onCreate)を呼び出す必要があります。

関連する問題