2012-05-31 4 views
9

Ich verwende RequireJs 2.0 (oder versuchen zu verwenden).RequireJS mit mehreren Daten-Haupt

Derzeit sind meine Assets in die Teile "General" und "Custom" gruppiert. Alle Seiten sollten die allgemeinen Skripts verwenden, während nur einige Seiten die benutzerdefinierte verwenden sollten.

Von was ich RequireJs sagen kann, akzeptiert einen data-main Wert, der Ihre Konfiguration enthält und im Grunde Ihr Modul erfordert. Das ist in Ordnung, wenn alle Seiten die gleichen Assets verwenden, aber wie würde ich ein zusätzliches data-main Skript für benutzerdefinierte Seiten hinzufügen?

Vielen Dank!

Antwort

3

Verwenden Sie das Attribut data-main, um das allgemeine Skript zu laden. Wenn Sie auf den benutzerdefinierten Seiten etwas tun möchten, für das ein benutzerdefiniertes Modul erforderlich ist, können Sie es einfach in einen require-Anruf umwandeln. Ihre Masterseite (oder Vorlage oder Layout oder was auch immer Sie es auf Ihrer Server-Plattform genannt) hätte dies:

<html><head> 
<script language="javascript" src="require.js" data-main="general" ></script> 
</head> 

Ihre benutzerdefinierte Seite Markup wie folgt aussehen (Syntax aus dem Speicher; double-check!)

<p class="funny">I'm a funny paragraph</p> 
<script language="javascript"> 
require(['funny-stuff'], function(fs) { 
    fs.doSomthing(); 
}); 
</script> 

Das Modul funny-stuff würde nur von Seiten geladen werden, die danach fragen. Wenn Sie auf einigen Seiten kein separates Markup verwenden möchten oder können, können Sie eine Abhängigkeit von Ihrem Hauptscript dynamisch laden, indem Sie einen -Aufruf in eine if-Anweisung einfügen. Innerhalb general.js:

// Determine if we need the custom module 
if (isFunnyPage()) { 
    require(['funny-stuff'], function(fs) { 
    fs.doSomething(); 
    }); 
} 

Sie müssen vorsichtig sein, wenn Sie das Optimierungsprogramm ausführen, weil es die Abhängigkeit in dem Anruf require verwiesen finden, und durch Standardpaket mit Ihrer Hauptdatei. Daher müssten Sie das Optimierungsprogramm konfigurieren, um die benutzerdefinierten Module auszuschließen.