2016-11-02 7 views
0

Ich habe eine JSON-Datei, die eine Reihe von Javascript-Dateien enthält. Ich bekomme dies und dann Schleife über jedes und laden Sie jedes Skript dynamisch. Meine Frage ist, möchte ich einige der Klassen verwenden, die dynamisch geladen wurden, nachdem ALLE Skripte geladen wurden, und ich nicht sicher bin, wie man weiß, wann sie alle geladen sind und ich die Klassen in ihnen verwenden kann?Laden von Skripten dynamisch aus JSON-Konfigurationsdatei

$.getJSON('Scripts/Nodes/plugins.json', 
       function (data) { 
        for (var script in data) { 
         $.getScript(script, function (data) { 

         }); 
        } 
       }); 

Da ich Schleifen über Skripte und sie einen nach dem anderen und jede Last eines Skripts Laden ist async wie kann ich wissen, wenn alle Skripte geladen werden? Dies geschieht alles beim Start, also würde ich idealerweise, nachdem alle geladen sind, eine Funktion aufrufen, um zu tun, was ich tun muss.

+1

Sie können die Callback-Funktion "Erfolg" und einen Zähler verwenden. Erhöhen Sie einfach Ihren Zähler im 'success' Callback in jedem $ .getScript'. Sobald Sie 'counter == data.length 'wissen, haben sie alle geladen. – Gavin

Antwort

1

Wie Gavin in den Kommentaren sagte, könnten Sie die Erfolgsfunktion im getScript-Aufruf nutzen. Sie können entweder einen Zähler inkrementieren oder eine Funktion ausführen, die überprüft, ob die gewünschte Klasse definiert ist oder nicht, und dann den erforderlichen Code ausführen, der diese Klasse verwendet.

Sie könnten auch eine Zeitüberschreitung nutzen, aber ich würde davon abraten, weil die Zeitüberschreitung ein Wettlauf gegen das Laden der Dateien wäre, was unzuverlässig wäre. Wenn das Zeitlimit zu lang ist, wartet der Benutzer zu lange und dies ist eine schlechte Benutzererfahrung.

Ehrlich gesagt sollten Sie noch einmal überdenken, wie Sie die Javascript-Dateien laden. Sofern Sie die Plugins nicht bedingt laden, ist es nicht sinnvoll, die packages.json-Datei zu übernehmen und dann die Pakete zu durchlaufen. Fügen Sie einfach alle Ihre Pakete auf der Seite ein, oder noch besser, verketten Sie und reduzieren Sie Ihre Pakete in eine 'core.js' Datei. Es gibt eine Vielzahl von NPM/Grunt/JSPM-Tools, um dies für Sie zu tun.

+0

Dies ist für eine Node-Webkit-App keine Website. Ich lasse Leute meine App mit ihren eigenen Knoten erweitern und sie müssen nur ihren Knoten in den richtigen Ordner setzen und dieser json config Datei hinzufügen. – user441521