Après avoir joué avec AMD/RequireJS, je me demandais si c'était une bonne idée de charger des modules d'interface utilisateur, y compris des modèles et CSS, afin qu'ils soient complètement indépendants de la page Web.
Cela semble bon, mais je n'ai pas vu cela implémenté dans la nature, il peut donc y avoir des pièges.
Pensez à un module d'interface utilisateur avec la structure suivante:
myWidget
|--img
|--main.js
|--styles.css
+--template.tpl
Tous les trucs dans un dossier. Ça a l'air très sympa.
Le module dans main.js ressemblerait à ceci:
define(["TemplateEngine", "text!myWidget/template.tpl"], function(TemplateEngine, template) {
// Load CSS (Pseudo Code)
var cssUrl = "myWidget/styles.css";
appendToHead(cssUrl);
return function() {
return {
render: function(data) {
return TemplateEngine.toHtml(template, data);
}
}
}
});
Les questions sont maintenant:
Vous pouvez spécifier le modèle comme une dépendance en utilisant le texte! module comme vous l'avez montré. Je le fais avec des modèles de moustache.
Cependant, Require.js ne prend pas explicitement en charge les fichiers CSS.
Voici l'explication officielle, elle est assez bien expliquée: http://requirejs.org/docs/faq-advanced.html#css
Edit: fév 2012.
Des modèles tels que les guidons peuvent également être précompilés et inclus comme tout autre module JS http://handlebarsjs.com/precompilation.html
Edit: août 2015
Si vous recherchez ce type de modularisation, vous devriez regarder webpack et plus précisément css-loader . Je l'utilise pour coupler des fichiers .css avec des fichiers .jsx en tant que "module" unifié et extraire le CSS pertinent dans une seule feuille de style au moment de la construction.
Il existe un plugin CSS tiers pour RequireJS qui semble bien fonctionner: https://github.com/VIISON/RequireCSS/ .