2012-01-05 9 views
7

Normalmente se carga en una red troncal de aplicaciones utilizando require.js durante la carga de la páginacómo inicializar su aplicación dentro de la columna vertebral require.js después de devolución de llamada externa

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

que carga algunas dependencias, y lanza la aplicación.

Si su aplicación requiere la manipulación del DOM, puede utilizar el plugin domready

require(['domReady','app' ], function (domReady, App) { 
    domReady(function (App) { 
    App.Initialize() 
    }): 
}); 

Pero mi aplicación se comunica con un API de Flash. Necesito esperar hasta que el plugin flash termine de cargar su propio xml. Lanzo una devolución de llamada a Javascript cuando esto está hecho. Esta devolución de llamada debe desencadenar la aplicación.inicializar() con las dependencias como en require.js

El primer método y el segundo método (a la espera de dom) no garantizan que la aplicación flash esté disponible todavía. Entonces, ¿cómo puedo inicializar la aplicación, para que app.js tenga sus dependencias y la aplicación flash esté disponible? O formulado de otra manera: ¿Cómo puedo inicializar require.js través de un evento javascript/devolución de llamada

Actualización: Al parecer, esto sería suficiente:

<script data-main="js/main" src="js/libs/require/require.js"></script> 
<script type="text/javascript"> 
    function init(){ 
     require(['framework/app'], function(App){ 
      App.initialize(); 
     }); 
    }  
</script> 

El plugin flash simplemente puede llamar window.init() para iniciar la aplicación. Lo malo es que jQuery se carga cuando la aplicación se inicializa. Esto podría ocasionar un pequeño retraso antes de que se muestren las cosas.

I eonder si, cuando la carga jQuery en la cabeza/extremo del cuerpo, require.js se vuelva a cargar/crear instancias de otra copia de jQuery, o leer desde la memoria caché/dom

Respuesta

0

No sé mucho (en realidad nada) sobre flash en el navegador, pero si hay una manera de detectar con JavaScript que flash ha cargado:

  1. que flash cambiar una variable global JavaScript
  2. Hacer flash añadir un atributo a algunos elementos

A continuación, puede crear una función de JavaScript que compruebe esta condición (cada 1 segundo, por ejemplo) e inicialice la aplicación una vez que se haya validado la verificación. Use setInterval(function, time) para crear esta función. Asegúrese de borrar el intervalo después de cargar su aplicación, para asegurarse de que no vuelva a cargarse.

1

Puede aprovecharse de requirejs shim config, que le permitirá definir una 'exportación' para los módulos requeridos especificados. Esta exportación será el valor almacenado en caché en el contexto global y estaría disponible como la función de devolución de llamada de empleo:

<script data-main="js/main" src="js/libs/require/require.js"></script> 
<script type="text/javascript"> 
    requirejs.config({ 
     shim: { 
      'framework/app': { 
       exports: 'App' 
      } 
     } 
    }); 
    require(['framework/app'], function(App){}); 
</script> 

A partir de aquí, el código que vuelve a llamar una función de JavaScript puede simplemente llamar:

App.initialize(); 
+0

Gracias por su respuesta, aunque han pasado dos años :) Realmente no puedo probar si funciona ahora. – Jareish

Cuestiones relacionadas