Ich habe einige js-Dateien auf diese Weise organisiert (siehe source ):
gmaps4rails.base.js
: enthält die gesamte Logik
gmaps4rails.googlemaps.js
: enthält Funktionen
gmaps4rails.bing.js
: enthält Funktionen mit demselben Namen wie die vorherige Datei
Im Grunde ruft base
createMarkers()
auf, was sowohl in googlemaps
als auch in bing
der Fall ist.
Ab jetzt lade ich nur eine von gmaps4rails.googlemaps.js
und gmaps4rails.googlemaps.js
, abhängig von der Karten-API, die ich brauche, also funktioniert es gut.
Nun möchte ich alle Dateien laden können (und sie getrennt halten), aber natürlich nur den Code der gewünschten Karten-API.
Im Grunde denke ich an etwas wie:
%Vor%Vielen Dank im Voraus.
Wenn ich richtig verstehe, dass Sie nur die Google Maps-API oder die Bing-API oder eine andere verwenden möchten, basierend auf der Benutzerauswahl (oder einigen anderen Kriterien)? Anstatt also die richtige API in Ihr Basisobjekt einzubinden, sollten Sie nicht einfach einen 'mapService' von Ihrem Basisobjekt ableiten und den mapService basierend auf den gewünschten Kriterien auswählen?
In etwa so:
%Vor%Wollen Sie das tun?
Hoffe, das hilft
Ich denke, Sie suchen nach einer Art von asynchronem Lader. CommonJS hat Module 1.1 vorgeschlagen und die Asynchrone Modul Definition (AMD) API , die dies tun. Es gibt einige Implementierungen von Async-Loadern, die in dieser Google-Tabelle aufgeführt sind . Einige davon sind AMD-konform, zum Beispiel:
Dieser Blog-Eintrag hat eine nette Sache Diskussion zu diesem Thema.
Siehe auch diesen SO-Post: Namespace den Inhalt einer dynamisch geladenen JavaScript-Datei
Tags und Links javascript ruby-on-rails