Pregunta

Ver esta demostración del grupo de filamentos utilizando su mejora progresiva mejorar.js biblioteca

Modificando para dar:-

<script type="text/javascript" src="../_shared/EnhanceJS/enhance.js"></script>
<script type="text/javascript"> 
// Run capabilities test
enhance({
loadScripts: [
 {src: 'js/excanvas.js', iecondition: 'all'},
 '../_shared/jquery.min.js',
 'js/visualize.jQuery.js',
 'js/example.js'
],
loadStyles: [
'css/visualize.css',
'css/visualize-dark.css'
] 
}); 

    alert($);

</script> 

Recibo un "$ es un error indefinido" en la alerta presumiblemente porque jQuery aún no se ha cargado.

Nota: la alerta ($) es solo para la depuración, estoy tratando de hacer algo con ese, por ejemplo, $ ('un selector') - y no $ (controlador) o $ (documento). Listo, etc. tampoco funciona - JQuery no está cargado, $ no está definido.

Mejora OnScriptLoaded Parece que debería hacer el truco, pero si agrego

onScriptsLoaded:[runMyCode()]

y después

function runMyCode()
{
    alert("runMyCode was called");
    alert($);
}

La primera alerta funciona pero $ todavía no está definida.

Si llamo runmycode en un evento de clic de un botón, funciona.

Entonces, la pregunta es: ¿cómo puede ejecutar código una vez que todos los scripts hayan terminado de cargar con mejoras.js?

PD mismo problema verificado en IE8/FF3/Chrome7

¿Fue útil?

Solución

Creo que esto es lo que buscas, ten en cuenta que onScriptsLoaded se usa directamente como una devolución de llamada, por lo que debería ser una función, no una matriz:

enhance({
   loadScripts: [
    {src: 'js/excanvas.js', iecondition: 'all'},
    '../_shared/jquery.min.js',
    'js/visualize.jQuery.js',
    'js/example.js'
   ],
   loadStyles: [
    'css/visualize.css',
    'css/visualize-dark.css'
   ],
   onScriptsLoaded: function() { alert($); }
});

O más generalmente para una función, pase solo la referencia como esta:

   onScriptsLoaded: runMyCode

La razón onScriptsLoaded:[runMyCode()] "Un tipo de" funciona es que es inmediatamente invocando el runMyCode función (en el momento en que se ejecuta esta línea, no Cuando terminan los scripts) y hace una matriz de ese resultado. Esto realmente arrojará un error cuando los scripts terminen, ya que onScriptsLoaded se espera que sea una función de devolución de llamada, no una matriz.

Otros consejos

Creo que esto puede ser un problema:

onScriptsLoaded:[runMyCode()]

¿Ha intentado (suponiendo que la notación de la matriz sea correcta): (editar - es no correcto)

onScriptsLoaded: [runMyCode]

? La primera forma en que está llamando a su función en el momento en que está configurando la biblioteca. Desea pasar solo la referencia a su función.

editar en realidad debería ser solo:

onScriptsLoaded: runMyCode

No sé de dónde vino la matriz; Definitivamente no se menciona en la documentación de "mejorar.js".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top