2017-12-20 18 views
0

グローバルな文脈では表示されません。ロードされたスクリプトは、私は私のモデルの一つでスクリプトをロードしようとしています

attached(){ 
$.ajax({ 
    type: 'GET', 
    url: '/lib/zxcvbn/dist/zxcvbn.js', 
    dataType: 'script', 
    cache: true 
}).done(function(script, textStatus) { 
    console.log('loaded script'); 
}); 

}

doneコールバックがしかし、輸出zxcvbnはでは利用できませんヒットしましたグローバルな文脈。

平野htmlページ(すなわちないアウレリア)に、同一のコードの実行が正常に動作します(zxcvbn は、グローバルな文脈で利用可能です)

私は、これは外部JSファイルをロードする推奨方法ではありません知っていますしかし、aureliaではスクリプトはかなり大きく、アプリ内の1つの場所でのみ必要です。 zxcvbn状態に対する ドキュメント:

zxcvbn検出しCommonJS(ノード、browserify)およびAMD(RequireJS)をサポートします。それらが存在しない場合、グローバルな名前空間に単一の関数zxcvbn()を追加します。

My aureliaアプリはRequireJSを使用しています。ロードされているグローバル名前空間にロードされていない場合、どのように参照できますか?

答えて

1

あなたが提示した情報によると、zxcvbnはAMDローダが存在することを検出し(RequireJS)、defineを呼び出してAMDモジュールとして登録します。

既にページ上RequireJSを持っているので、あなたがrequireへの呼び出しを使用してjQueryのコールを交換し、完全なパスを渡すことができます:

require(['/lib/zxcvbn/dist/zxcvbn.js'], function (zxcvbn) { 
    // Do something with zxcvbn ... 
}); 

スクリプトは、AMDモジュール、パラメータとして自身を登録しているのでzxcvbnはモジュールの値を保持します。スラッシュで始まるパスを渡すときであるよう-、RequireJSは、パスを使用していることを

注:これはあなたのRequireJSの設定を迂回(例えばbaseUrlpathsmap等、適用されていない)、およびRequireJSはしていません.js拡張を追加してください。拡張が必要です。

+0

本当に確かな答えだった、ありがとう – wal

関連する問題