2011-12-10 10 views
37

Właśnie zaczynam od require.js. Udało mi się zapakować jquery, kilka wtyczek i kilka własnych modułów. Próbuję wejść w interakcję z moimi modułami (lub jquery) z Firebug (lub konsoli Google Chrome JS) i nie mam dużo szczęścia.Interakcja z modułami require.js z konsoli Firebug/Chrome?

Jaki jest właściwy sposób dostępu do tych modułów z poziomu konsoli?

Odpowiedz

52

że mamy /app/scripts/methodsModule.js moduł, który zwraca się kilka metod:

define({ 
    someMethod: function() { 
     // do stuff 
    }, 
    anotherMethod: function() { 
     // do some more stuff 
    } 
}); 

w naszym /app/scripts/main.js plik danych-main mamy:

require(['methodsModule'], function(methods) { 
    methods.someMethod() // call someMethod 
    methods.anotherMethod() // call anotherMethod 
}) 

po requireJS ładuje nasze dane Menem, możemy uzyskać dostęp do dodatkowych modułów, które zostały już załadowane przez requireJS z javascript wierszu poleceń konsoli tak:

>> methods = require('methodsModule'); // requireJS has module methodsModule stored 
>> methods.someMethod() // call someMethod 
>> methods.anotherMethod() // call anotherMethod 

Jeśli moduł nie został załadowany przez wywołanie require() lub define(), musimy zdać własne zwrotnego dla funkcji wymaga, aby zadzwonić po moduł został załadowany:

>> myCB = function(methods) { methods.someMethod() } 
>> require(['methodsModule'], myCB) 

Inaczej , requireJS zgłasza błąd z informacją, że moduł nie został jeszcze załadowany.

+1

czy to działa ze skryptami wymagającymi "zoptymalizowania" JS? Może robię coś złego tutaj, ale to nie działa dla mnie. – Stephen

+0

nadal aktualne na dzień 20.05.2015. Przekształcając "prymitywny" projekt na AMD, musiałem upewnić się, że wszystko działa. Jednak nie udało mi się zlokalizować miejsca, w którym powrócił obiekt modułu po wykonaniu polecenia define. Świetne wyjaśnienie. –

12

Istnieje sposób bez użycia połączeń zwrotnych.

Jeżeli moduł, który nie był wymagany w konsoli albo wniosek wcześniej, można po prostu wymaga to najpierw:

require(['methodsModule']); 

Po tym można użyć „dynamiczny” wymaga dostępu do nich:

require('methodsModule').someMethod(); 
+0

To było znacznie łatwiejsze niż to, co próbowałem, '+ 0.1E1'. Wolę jednak załadować moduł do okna, aby uzyskać łatwy dostęp. 'require ([m = 'lib/imagesloaded']); imagesLoaded = require (m); ' – Orwellophile