2

私はGoogleの閉鎖ライブラリを試してよ、とthe official XhrIo guideを通じて働いていなくて閉鎖ライブラリ内の `goog.require`dオブジェクトにアクセスします。 私は、xhr-quick2.js例といくつかのトラブルに走っ以下に再現:コンパイル

goog.require('goog.net.XhrIo'); 

var xhr = new goog.net.XhrIo(); 

goog.events.listen(xhr, goog.net.EventType.COMPLETE, function(e) { 
    obj = this.getResponseJson(); 
    log('Received Json data object with title property of "' + 
     obj['title'] + '"'); 
    alert(obj['content']); 
}); 

function getData(dataUrl) { 
    log('Sending simple request for ['+ dataUrl + ']'); 
    xhr.send(dataUrl); 
} 

を実行すると、私はエラーが表示されます。

Uncaught TypeError: Cannot read property 'XhrIo' of undefined

私はgetData 内にイベントリスナーとXHRのインスタンスを移動した場合関数(本体のonloadと呼ばれています)はすべて正常です。

goog.require('goog.net.XhrIo') 

function getData(dataUrl) { 
    var xhr = new goog.net.XhrIo() 

    goog.events.listen(xhr, goog.net.EventType.COMPLETE, function(e) { 
    obj = this.getResponseJson() 
    log(`Received Json data object with title property of "${ obj["title"] }"`) 
    alert(obj["content"]) 
    }) 

    log(`Sending simple request for [${ dataUrl }]`) 
    xhr.send(dataUrl) 
} 

function log(msg) { 
    document.getElementById('log').appendChild(document.createTextNode(msg)); 
    document.getElementById('log').appendChild(document.createElement('br')); 
} 

私はgoog.requiregoog.net.XhrIoが最初のサンプルコードのライン3上にインスタンス化されるときnetのインポートを終了していないためであると仮定する。私のワークフローは、開発のための許容可能である暗示私は 理想的なソリューションは、閉鎖コンパイラを介してすべての私のコードを実行することであると仮定し、私はちょうど実験 とother parts of the documentation です。

はこの 問題を排除するであろう、私は手動で私のhtmlのソースできることはありますか?私が取るべき他のアプローチがありますか?

答えて

2

私は最後の閉鎖と遊んだので、それは数年をされているが、私はあなただけの依存コンパイラなしで必要と使用することができないと思います。

クロージャは、goog.modulegoog.requireのJavaScriptファイルをスキャンしてdeps.jsというファイルを作成します。このファイルは、JavaScriptファイルの前に最初にロードする必要があります。コードで使用されているすべてのモジュールがリストされ、正しい順序でロードされます。

deps.jsが最初に来る場合は、コードに到達するまでにgoog.netが読み込まれます。 1行目のコードgoog.require('goog.net.XhrIo')はこの時点で無視されます。

ドキュメントによればgoog.require現在<script>実行中後<script>タグが挿入されます。したがって、deps.jsを使用するステップをスキップしたい場合は、ドキュメント準備完了コールバックですべてをラップするか、コードの前にロードされたJavaScriptファイルにgoog.requireを追加する必要があります。

私はそれだけでdeps.jsファイルを作成するために、閉鎖依存ライターを使用するために努力し、より簡単に価値はないと思います。

ここに簡単なチュートリアルがあります:

https://www.safaribooksonline.com/library/view/closure-the-definitive/9781449381882/ch01.html

はここdeps.jsファイルを書き込むためにCLIです:

python ../closure-library/closure/bin/calcdeps.py \ 
    --dep ../closure-library \ 
    --path my_stuff.js \ 
    --output_mode deps > deps.js 
0

未コンパイルモードの場合は、必要な書類を事前にロードする必要があります。だからあなたのhtml文書にあなたが持っているでしょう:

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="path/to/closure/base.js"></script> 
    <script> 
     goog.require('goog.net.XhrIo'); 
    </script> 
    <script src="mysource.js"></script> 
    </head> 
</html> 

任意の依存関係は、別のスクリプトタグにロードする必要があります。上記のコードサンプルはうまくいくはずです。