Próbuję utworzyć moduł, który można załadować asynchronicznie (AMD) i za pomocą znacznika skryptu HTML. Dodałem tę konstrukcję do mojego modułu (wziąłem go z kodu źródłowego jQuery):

if ( typeof define === "function" && define.amd ) { 
    define( "mymodule", ['googlemaps'], function(google) {
       return myModule; 
    }); 
}

myModule = function() {
    // here code uses "google" 
}

Mój moduł zależy od interfejsu API Google Maps, więc jeśli załaduję mój moduł za pomocą tagu skryptu HTML działa. Ale jeśli mój moduł został załadowany asynchronicznie zmienna "Google" dostępna tylko w bloku "Define". Czy są jakieś sposoby przekazywania tej zmiennej do globalnego zakresu (dla mojego pliku modułu)?

2
barinbritva 14 sierpień 2014, 10:54

2 odpowiedzi

Najlepsza odpowiedź
(function(global, factory) {
  if (typeof define === 'function' && define.amd) { // requirejs
    return define(['googlemaps'], factory);
  } else if (typeof exports === 'object') {    // nodejs
    return module.exports = factory(require('googlemaps'));
  } else {  // html
    return global['Odysseus'] = factory(global['googlemaps']);
  }
})(this, function(GoogleAPI) {
    ...
    return myModule; 
});
1
kumarharsh 14 sierpień 2014, 07:07

Możesz zadeklarować zmienną globalną GoogleAPI i dodać wartość od zdefiniowania do niego

var GoogleAPI;
define( "mymodule", ['googlemaps'], function(google) {
    GoogleAPI = google;
    return myModule; 
});
1
monkeyinsight 14 sierpień 2014, 07:02