2016-05-13 4 views
1

私はいくつかの変数を使用するJSを持っています。これはOSGIやダイアログから来ています。だから、これらは私のJSの前にロードする必要がありますが、推奨されるcq:includeタグはこれらの前にJSファイルをロードします。どんなスマートなアイデア?cq:includeを使用して外部JSをインクルードする前に、グローバルJS変数をJSPに含めるにはどうすればよいですか?

<script> 
var globalVar ="<%=someJspVar%>"; 
</script> 
<cq:includeClientLib js="something.that.uses.globalVar" /> 

答えて

2

あなたはAEMのdependencies機能を使用する必要があります。グローバルjをコンポーネントjの依存関係として指定することができます。これは、AEMが生成されたhtmlにコンポーネントjsの前にグローバルjsを含めることを意味します。

詳細はAdobe documentationをご覧ください。

+0

しかし、グローバルなJS変数のJSP値が「<%=jspVar%>」の場合はどうなりますか?私はそれらを外部のスクリプトに含めることはできないので、それらを依存関係に含めることはできません。 –

2

クライアントライブラリの依存関係を使用することは良い選択ですが、グローバルJavaScriptがライブラリになく、代わりに動的にレンダリングされる場合、このオプションは機能しません。そのような場合には、グローバル変数に依存するコードをreadyイベント内にすることをお勧めします。そうすれば、すべてが存在して使用できる状態になるまで、これらのグローバル変数に依存する処理が開始されることはありません。

例:

$(function() { 
    // Code in your client library that depends on a variable with global scope 
}); 

はjQueryのreadyイベントのオプションの詳細についてはhttps://api.jquery.com/ready/を参照してください。

+0

含まれているclientLibには、サードパーティのJavaScriptプラグインが含まれています。私はそれらに触れないようなものを探していました。 –

+1

"ready"イベントがクライアントライブラリを遅らせる必要があるかもしれないので、コードを変更するのではなく、動的にロードするだけです。 https://api.jquery.com/jquery.getscript/を使用して、クライアントライブラリコードを「準備完了」機能の中から読み込むことができます。 – Shawn

+0

@ Shawnのコメントに同意します。好奇心のために、サードパーティのJSプラグインがJSPコンポーネントの変数に依存するのはなぜですか? – Abhishek

関連する問題