2012-04-17 17 views
11

Mögliche Duplizieren:
How to load bootstrapped models in Backbone.js while using AMD (require.js)globale Variablen in requireJS

Dies ist eine einfache Demo über mein Problem.

Ich muss auf die id_user in main.js Datei zugreifen. Meine Frage ist, wie kann man in dieser Situation globale Variablen vermeiden? Es ist eine schlechte Praxis, globale Variablen für diesen Zweck zu verwenden?

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

Ich würde sagen, dass Sie nicht um einen globalen var erhalten haben. Aber mehr als einen zu verwenden, ist eine schlechte Praxis :-) – Bergi

Antwort

10

Es keine globale Variable für eine solche Nutzung in Projekt sein sollte requirejs wie es zu handhaben Modulen und Alle Module (und ihre Eigenschaften/Methoden) werden niemals global deklariert, um die Umgebung schön und sauber zu halten. Wenn Sie ein Modul benötigen, um eine Variable in einem anderen Modul zu verwenden, dann sollten sie entweder miteinander über eine API kommunizieren oder diese Variable als Eigenschaft festlegen, das Modul anfordern und die Eigenschaft auf diese Weise erhalten.

Aber vielleicht sollten Sie sich fragen, ob Sie requirejs tatsächlich brauchen. Wenn Sie eine geeignete modulbasierte Anwendung erstellen möchten (was ich nicht sicher bin, wenn Sie sich fragen, wie Sie Variablen weitergeben können), dann ja, wenn Sie nur wenige Dateien von JS laden möchten, dann LazyLoad (http: // www. appelsinii.net/projects/lazyload) ist wahrscheinlich die Antwort. Ich sage nur, dass es sich lohnt, darüber nachzudenken, abhängig von Ihrem Fall, insbesondere unter Berücksichtigung des Fußabdrucks von Requirejs.

+2

Ein hacky Weg, Variablen herumzugeben, ist, sie im DOM in einem zu setzen und einfach zu greifen das Wertattribut – GillesC

+0

aber in einem einfachen Fall, in dem eine PHP-Variable an die main.js übergeben werden muss. Über welche Art von API sprichst du? –

+2

Sie sollten ein Modul deklarieren, das den Wert enthält. da requirejs direkt über Ihnen geladen wird, sollten Sie in der Lage sein zu definieren ('user', {id: }); und dann von main.js require ('user', function (user) {console.log (user.id)}); – GillesC