2014-04-29 26 views
7

Mam plik o nazwie moment.js na moim lokalnym systemie plików i ładowanie go w następujący sposób z require.js działa:Require.js lazy loading zdalnego url

initialize: function() { 

    require(['moment'], function(data) { 
     console.log(data); 
    }); 
} 

Jednak jeśli mam zrobić:

initialize: function() { 

    require(['http://momentjs.com/downloads/moment.min.js'], function(data) { 
     console.log(data); 
    }); 
} 

Dane wracają nieokreślone. Dlaczego to? i jak dynamicznie dołączać moduły zdalne w środowisku wykonawczym?

+0

Jakikolwiek komunikat o błędzie? – Louis

+0

nope. tylko czeka, a następnie rejestruje dane jako niezdefiniowane. – user3585419

Odpowiedz

7

zauważyłem, że kod, który próbujesz załadować hardcodes nazwę modułu jako moment tak skonfigurować RequireJS na miejscu, dzięki czemu można wymagać o tej samej nazwie:

initialize: function() { 

    require.config({ 
     paths: { moment: 'http://momentjs.com/downloads/moment.min' } 
    }); 

    require(['moment'], function(data) { 
     console.log(data); 
    }); 
} 
-2

Jeśli trzeba załadować moduł zarówno lokalnie, jak i ze zdalnego adresu URL, należy nazwa moduł gdy definiowania to i dodaj moduł "alias", który ma nazwę podobną do adresu URL, z obydwoma modułami zdefiniowanymi w tym samym pliku .

Przykład:

//define a module NAMED "moment" using the first optional name paramter 
    define("moment", ["require"], function (require) { 
     /*module code goes here*/ 
    }); 

    //alias module to use when lazy loading from URL 
    define("http://momentjs.com/downloads/moment.min.js", ["require"], function (require) { 
     return require("moment");//returns original module 
    }); 

Możesz przeczytać więcej na ten temat w blogu pisałem here.