Frage

Sehen Diese Demo aus der Filamentgruppe mithilfe ihrer progressiven Verbesserung Enhance.js Bibliothek

Änderungen zu geben:-

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

Ich bekomme einen "$ is undefinierten Fehler" in der Warnung vermutlich, weil JQuery noch nicht geladen hat.

HINWEIS - Der Alarm ($) ist nur zum Debuggen - ich versuche etwas mit diesem zB $ ('SOME -SELTEKTOR') zu tun - und kein $ (Handler) oder $ (Dokument). JQuery ist nicht geladen, $ ist nicht definiert.

Verbesserung ONSCRIPTLAD Sieht so aus

onScriptsLoaded:[runMyCode()]

und später

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

Der erste Alarm funktioniert, aber $ ist immer noch nicht definiert.

Wenn ich RunmyCode auf einem Klickereignis einer Schaltfläche aufrufe, funktioniert es.

Die Frage ist also: Wie können Sie Code ausführen, sobald alle Skripte das Laden mit Enhance.js beendet haben?

PS Gleiches Problem in IE8/FF3/Chrome7 überprüft

War es hilfreich?

Lösung

Ich denke, das ist, was Sie suchen, beachten Sie das onScriptsLoaded wird direkt als Rückruf verwendet, Es sollte also eine Funktion sein, kein 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($); }
});

Oder allgemeiner für eine Funktion, über die Referenz wie folgt bestehen:

   onScriptsLoaded: runMyCode

Der Grund onScriptsLoaded:[runMyCode()] "Art von" Werke ist es sofort Aufrufen der runMyCode Funktion (zum Zeitpunkt dieser Zeile, die ausführt, nicht Wenn die Skripte fertig sind) und ein Array aus diesem Ergebnis herstellen. Dies macht tatsächlich einen Fehler, wenn Skripte abgeschlossen sind, seitdem onScriptsLoaded Es wird erwartet, dass es eine Rückruffunktion ist, kein Array.

Andere Tipps

Ich denke, das kann ein Problem sein:

onScriptsLoaded:[runMyCode()]

Haben Sie es versucht (unter der Annahme, dass die Array -Notation korrekt ist): (bearbeiten - es ist nicht Korrekt)

onScriptsLoaded: [runMyCode]

? Im ersten Weg rufen Sie Ihre Funktion zum Zeitpunkt der Einrichtung der Bibliothek auf. Sie möchten stattdessen nur den Verweis auf Ihre Funktion übergeben.

bearbeiten Eigentlich sollte es nur sein:

onScriptsLoaded: runMyCode

Ich weiß nicht, woher das Array kam; Es wird in der Dokumentation "Enhance.js" definitiv nicht erwähnt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top