41 votes

Comment RequireJS fonctionne-t-il avec des pages multiples et des vues partielles ?

Je suis en train de chercher RequireJS mais je suis incertain de certaines choses.

Je comprends comment je peux charger toutes mes dépendances avec main.js . Mais est-ce que je dois ajouter une logique pour travailler avec ces dépendances dans l'application main.js ?

Pour moi, main.js semble être un état document.ready et vous entrez la logique là quand le document a été chargé, non ?

Et pour les autres pages et les vues partielles, dois-je créer de multiples main.js ou puis-je simplement référencer les fonctions chargées dans les dépendances des vues dans un fichier <script> par exemple ?

93voto

Simon Smith Points 5593

Mise à jour - J'ai ajouté un exemple d'utilisation de RequireJS avec des composants HTML modulaires. Exemple d'outil de construction inclus - https://github.com/simonsmith/modular-html-requirejs

J'ai également écrit un article sur ce sujet sur mon blog. http://simonsmith.io/modular-html-components-with-requirejs/


L'approche consistant à utiliser simplement main.js car tout est probablement plus adapté à une application à page unique .

La façon dont j'ai géré cette situation est de n'inclure que le JS commun au site dans le fichier main.js fichier :

Sur chaque page :

<script src="require.js" data-main="main"></script>

main.js

require.config({
// config options
});

require(['jquery', 'common/ajaxLoader', 'common/someOtherModule'], function($, ajax, otherModule) {
    // Modules that do stuff on every page are instantiated here 
});

page1.html

<script>
    require(['scripts/page1']);
</script>

page1.js

require(['jquery', 'page1Module'], function($, module){
    // page1 specific stuff here
});

L'exemple ci-dessus n'est qu'une des nombreuses façons de le faire. Remarque : la différence entre le chargement d'un simple fichier JavaScript et d'un module .

Une règle empirique que je suis est de garder tous les modules réutilisables (ou les classes si cela facilite la conceptualisation) à l'intérieur d'un fichier define avec leurs propres dépendances, etc., puis utiliser require pour saisir ces modules, utiliser leurs méthodes ou interagir avec eux d'une manière ou d'une autre.

L'utilisation de ce modèle nécessitera très certainement l'utilisation du module domReady qui est un plugin séparé pour RequireJS . Utilisez cette au lieu d'une fonction prête dans jQuery par exemple, car il permet aux modules de commencer le téléchargement avant que le DOM ne soit prêt, ce qui réduit l'attente pour l'exécution de votre code.

Modifier Vous pouvez souhaiter voir un autre exemple d'application multi-pages dans le répertoire RequireJS

3voto

Chris Baxter Points 8085

Je me suis récemment livré à l'exercice consistant à configurer RequrieJS avec l'optimisation automatique de la construction dans une application ASP.NET MVC. Il existe de nombreux articles de blog utiles, comme celui de Simon, qui constituent une excellente référence. D'un point de vue ASP.NET, l'un des plus utiles que j'ai trouvé en termes de configuration de l'optimiseur RequireJS pour les applications ASP.NET multi-pages est le suivant Faire en sorte que RequireJS soit compatible avec ASP.NET MVC .

En utilisant les excellentes informations déjà disponibles, j'ai créé mon propre site web. ASP.NET MVC RequireJS exemple sur GitHub . Une grande partie de ce qui est inclus est similaire à des exemples déjà existants, cependant pour aborder la question des vues partielles, et des dépendances de besoin multi-pages, j'ai adopté une approche légèrement différente.

_Layout.cshtml

La différence la plus notable par rapport aux exemples existants réside dans la création d'une RequireViewPage qui expose les méthodes pour passer les données de configuration à RequrieJS ainsi que les dépendances requises spécifiques à la page de référence.

Ainsi, votre _Layout.cshtml ressemblera beaucoup à ce que vous attendez avec :

<head>
    ...
    @RenderModuleConfig()
    <script type="text/javascript" src="@Url.Script("vendor/require.js")" data-main="main"></script>
</head>
<body>
    ...

Vues et partielles

Pour câbler les vues (et dans mon cas les modèles de vues knockout), un fragment de script supplémentaire a été ajouté au bas de _Layout.cshtml comme suit

    ...
    @RenderSection("scripts", required: false)
    <script type="text/javascript">require(['main'], function () { require(['lib/knockout/knockout.require']); });</script>
</body>

Cela garantira que pour toute dépendance de vue, le module principal a été chargé (en supposant que les dépendances pour main ont été définies dans le fichier main.js et permet ensuite aux dépendances spécifiques à la vue d'être câblées via des attributs de données.

<div data-require="@MainModule"> ... </div>
<div data-require="@Module("address")"> ... </div>
<div data-require="view\home\index\model"> ... </div>

Pour une explication complète de la conception et des choix, voir le site web de la Commission européenne. README sur GitHub

0voto

Malkov Points 455

Vous pouvez trouver des détails sur la façon d'utiliser RequireJS et la modularité JavaScript ici : Modularité JavaScript avec RequireJS (du code spaghetti au code ravioli)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X