bibliotecas mejoras.js onScripted en ejecución antes de jQuery cargar
-
30-09-2019 - |
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
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".