2012-03-27 21 views
5

Może tęskniłem za tym w dokumentacji gdzieś, ale tutaj jest. Mam główny kontroler, który zajmuje się zarządzaniem modułami. Mam do tej pory około 20 modułów i chciałbym móc je łatwo skonfigurować tak, aby były ładowane przez rdzeń. Oznacza to, że mam dużą tablicę lub wiele połączeń wymagających. Czy dopuszczalne jest/tworzy się listę modułów w obiekcie dosłownym, a następnie moduł ładuje z niej zależności? Oto przykład tego, co mam na myśli:RequireJS - Managing Modules Centrally

Config.js

modules = [ 
    'moduleA', 
    'moduleB', 
    'moduleC' 
]; 

Core.JS

define(
    ['config'], 
    function(config) { 
     // Somewhere in here I parse the list and require() each one ? 
     return { 
      startAll : function() { 
       console.log('starting all modules.'); 

       // Then call a method common to all 'modules' in the list above. 
      } 
     } 
    }; 
    } 
); 

Nie jestem pewien, czy to taki dobry pomysł, bo jestem nowy RequJJS, ale podoba mi się pomysł, aby móc skonfigurować, które moduły są ładowane z jednego miejsca. W moim przypadku według modułu mam na myśli widżety interfejsu użytkownika, które napisałem dokładniej.

Odpowiedz

3

Rozwiązałem ten sam problem, używając wzorca "paczki". Zasadniczo pakiet działa jako fasada dla moich widgetów. Aby dać lepsze wyobrażenie o tym, co mówię, rozważ to:

widgets.js:

define(['./widgets/button', ...], function(button) { 
    return { 
     button: button, // expose the widgets here 
     ... 
    } 
}); 

W tym przypadku moduł przycisk prostu zwraca funkcję. Może zaistnieć potrzeba dopasowania elewacji, aby pasowała do Twojego przypadku.

Ten schemat umożliwia odnoszenie się do widżetów po prostu poprzez importowanie elewacji. W moim przypadku było to bardzo korzystne. Używam tego samego pomysłu również w innych miejscach, aby łączyć moduły i ułatwić ich używanie.

W ten sposób stracisz niektóre zalety RequireJS. Spowoduje to załadowanie wszystkich widżetów w każdym przypadku, nawet jeśli w danej chwili nie potrzebujesz ich. Oczywiście w takim przypadku można po prostu zaktualizować elewację, ale to dodatkowa praca ...

+0

Widzę, co mówisz. Zasadniczo zbuduj listę obciążonych zależności i załaduj je do innego modułu? To całkiem fajne. – backdesk

+0

Yup. Nie wiem, czy to działa w twoim przypadku. Jednak uznałem to za całkiem użyteczne. –