Javascript Namespaces und bedingte Include

8

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.

    
apneadiving 25.08.2011, 15:47
quelle

2 Antworten

2

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

    
Jaime 26.08.2011, 21:09
quelle
2

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

    
William Niu 27.08.2011 00:34
quelle

Tags und Links