2012-03-27 5 views
5

Vielleicht habe ich das in der Dokumentation irgendwo verpasst, aber hier geht es. Ich habe einen Core-Controller, der sich um die Verwaltung von Modulen kümmert. Ich habe bisher ca. 20 Module und möchte diese einfach so konfigurieren können, dass sie vom Core geladen werden können. Dies bedeutet, dass ich eine große Anzahl von Anrufen benötige. Ist es akzeptabel/gute Praxis, eine Liste von Modulen in einem Literalobjekt zu erstellen und dann ein Modul seine Abhängigkeiten davon laden zu lassen? Hier ist ein Beispiel dafür, was ich meine:RequireJS - Module zentral verwalten

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. 
      } 
     } 
    }; 
    } 
); 

Ich bin mir nicht sicher, ob das so eine gute Idee ist, wie ich bin neu zu RequireJS, aber ich mag die Idee zu konfigurieren, welche Module von einem Ort geladen werden. In meinem Fall nach Modul beziehe ich mich auf UI-Widgets, die ich genauer geschrieben habe.

Antwort

3

Ich habe das gleiche Problem gelöst, indem Sie ein "Paket" -Muster von Arten verwenden. Grundsätzlich fungiert das Paket als Fassade für meine Widgets. Um Ihnen eine bessere Vorstellung von dem, was ich rede, betrachten Sie dieses:

widgets.js:

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

In diesem Fall wird die Tastenmodul nur eine Funktion zurückgibt. Möglicherweise müssen Sie die Fassade für Ihren Fall anpassen.

Dieses Schema ermöglicht es, auf die Widgets zu verweisen, indem einfach die Fassade importiert wird. In meinem Fall war das sehr vorteilhaft. Ich verwende die gleiche Idee auch an anderen Stellen, um Module einzupacken und sie einfacher zu verwenden.

Sie verlieren jedoch einige der Vorteile von RequireJS, indem Sie dies tun. Dadurch werden in jedem Fall alle Widgets geladen, auch wenn Sie gerade keine benötigen. Natürlich können Sie in diesem Fall nur die Fassade aktualisieren, aber es ist eine zusätzliche Arbeit ...

+0

Ich sehe was du sagst. Grundsätzlich eine Liste der geladenen Abhängigkeiten erstellen und in ein anderes Modul laden? Das ist ziemlich cool. – backdesk

+0

Yup. Ich weiß nicht, ob das für Ihren Fall funktioniert. Ich habe es jedoch sehr nützlich gefunden. –