Domanda

Vedere Questa demo dal gruppo di filamenti che utilizza il loro progressivo miglioramento Enhance.js biblioteca

Modifica per dare:-

<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> 

Ricevo un "$ è un errore indefinito" sull'avviso presumibilmente perché JQuery non è ancora stato caricato.

Nota - L'avviso ($) è solo per il debug - Sto cercando di fare qualcosa con quell'eg $ ('qualche selettore') - e no $ (gestore) o $ (documento) .Ready ecc. Non funzionare neanche - jQuery non è caricato, $ non è definito.

migliorare OnScriptlod Sembra che dovrebbe fare il trucco ma se mi aggiungo

onScriptsLoaded:[runMyCode()]

e più tardi

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

Il primo avviso funziona ma $ non è ancora definito.

Se chiamo RunMyCode su un evento Click di un pulsante, funziona.

Quindi la domanda è: come puoi eseguire il codice una volta che tutti gli script hanno finito di caricare con Enhance.js?

PS stesso problema verificato in ie8/ff3/chrome7

È stato utile?

Soluzione

Penso che questo sia quello che stai cercando, nota che onScriptsLoaded viene utilizzato direttamente come callback, quindi dovrebbe essere una funzione, non un array:

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 più in generale per una funzione, passa solo il riferimento come questo:

   onScriptsLoaded: runMyCode

La ragione onScriptsLoaded:[runMyCode()] "tipo di" opere è subito invocando il runMyCode funzione (al momento funziona questa riga, non Quando gli script finiscono) e fanno un array da quel risultato. Questo lancerà effettivamente un errore quando gli script finiscono, poiché onScriptsLoaded dovrebbe essere una funzione di callback, non un array.

Altri suggerimenti

Penso che questo potrebbe essere un problema:

onScriptsLoaded:[runMyCode()]

Hai provato (supponendo che la notazione dell'array sia corretta): (modificare - è non corretta)

onScriptsLoaded: [runMyCode]

? Nel primo modo, stai chiamando la tua funzione al momento dell'impostazione della libreria. Volete invece passare solo il riferimento alla tua funzione.

modificare In realtà dovrebbe essere solo:

onScriptsLoaded: runMyCode

Non so da dove provenga l'array; Non è sicuramente menzionato nella documentazione "Enhance.js".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top