2012-04-17 19 views
11

Duplicar posibles:
How to load bootstrapped models in Backbone.js while using AMD (require.js)variables globales en RequireJS

Esta es una demostración sencilla de mi problema.

Necesito acceder al archivo id_user en main.js. Mi pregunta es, ¿cómo evitar las variables globales en esta situación? ¿Es una mala práctica usar variables globales para este propósito?

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

yo diría que no obtiene alrededor de un var global. Pero usar más de uno es una mala práctica :-) – Bergi

Respuesta

10

No debería haber ninguna variable global para tal uso en el proyecto utilizando RequireJS ya que es de manejar y módulos todos los módulos (y sus propiedades/métodos) nunca se declaran globalmente para mantener el entorno limpio y agradable. Si necesita un módulo para usar un conjunto de variables en otro módulo, entonces debe hablar entre ellos a través de alguna API o tener esa variable establecida como una propiedad, requerir el módulo y obtener la propiedad de esa manera.

Pero tal vez deba preguntarse si realmente necesita requirejs. Si quiere construir una aplicación adecuada basada en módulos (que no estoy seguro de que sea así si se pregunta cómo pasar variables) entonces sí, si todo lo que quiere es cargar pocos archivos desde JS, entonces LazyLoad (http: // www. appelsiini.net/projects/lazyload) es probablemente la respuesta. Solo digo que vale la pena pensar en depender de su caso, especialmente teniendo en cuenta la huella de requirejs.

+2

Una forma de pasar la variable es ponerlos en el DOM en un y solo agarrar el atributo de valor. – GillesC

+0

pero en un caso simple donde se necesita pasar una variable php a main.js. ¿De qué tipo de API estás hablando? –

+2

Debe declarar un módulo que tenga el valor. como requirejs se carga justo arriba usted debería poder definir ('user', {id: }); y luego desde main.js require ('user', function (user) {console.log (user.id)}); – GillesC