2012-04-17 11 views
11

可能性の重複:
How to load bootstrapped models in Backbone.js while using AMD (require.js)グローバル変数

これは私の問題についての簡単なデモです。

main.jsファイルのid_userにアクセスする必要があります。私の質問は、この状況でグローバル変数を避ける方法です。この目的のためにグローバル変数を使用するのは悪い習慣ですか?

main.js

require({ 
    paths : { 
     jQuery : 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min' 
    } 
}); 

require([ 'jQuery' ], function() { 
     alert(id_user); 
    }); 

のindex.php

<script data-main="js/main" src="js/require.js"></script> 

<script type="text/javascript"> 
function users() { 
    id_user = <?php echo $id; ?> 
} 

users(); 
</script> 
+0

私はあなたが世界のVARの周りに取得しないと言うだろう答えます。しかし、複数のものを使うのは悪い習慣です:-) – Bergi

答えて

10

それは、モジュールを処理するためにあるようrequirejsを使用してプロジェクトにこのような使用のための任意のグローバル変数が存在すべきではないとすべてのモジュール(およびそのプロパティ/メソッド)は、環境をきれいに保つためにグローバルに宣言されることはありません。あるモジュールが他のモジュールで変数セットを使用する必要がある場合、それらはあるAPIを介してお互いに話すか、その変数をプロパティとして設定し、モジュールを必要とし、そのようにプロパティを取得する必要があります。

しかし、おそらくrequirejsが必要な場合は、自分自身に質問する必要があります。適切なモジュールベースのアプリケーションを構築したい場合は(例えば、変数を渡す方法が不思議であればわかりません)、JSからLazyLoad(http:// www。おそらく答えはappelsiini.net/projects/lazyloadです)。単にrequirejsのフットプリントを考慮して、あなたのケースに応じて考える価値があると言ってください。

+2

変数を渡す方法は、でDOMに設定し、 value属性 – GillesC

+0

しかし、PHP変数をmain.jsに渡す必要がある単純なケースではどんなタイプのAPIについて話していますか? –

+2

値を保持するモジュールを宣言する必要があります。 requirejsがあなたのすぐ上にロードされるので、define( 'user'、{id:})を実行できるはずです。 main.jsからrequire( 'user'、function(user){console.log(user.id)})を実行します。 – GillesC