5 votes

Backbone/RequireJS et modèles multiples

J'ai du mal à me faire à l'idée d'utiliser principalement RequireJS. Je vois que c'est une technologie bonne/nécessaire, mais sa mise en œuvre, pour moi, a été un véritable étirement. J'apprécie grandement votre aide !

J'essaie de développer une application assez souple avec Backbone et RequireJS. Le problème est que je suis totalement habitué à une syntaxe du type new Person() sans avoir à spécifier les dépendances. Existe-t-il un moyen efficace d'utiliser RequireJS avec un grand nombre de modèles ? Je pense que mon problème est de toujours travailler avec des retours. J'ai envisagé d'utiliser une méthode d'usine pour créer le modèle avec l'élément require mais pour ce faire, il faut que la fonction require est synchrone, ce qui va complètement à l'encontre de l'objectif de RequireJS.

Il ne me semble pas normal de devoir d'abord exiger tous mes modèles et de les inclure ensuite dans la fonction d'instanciation - ou dois-je le faire ?

Avez-vous des suggestions ou des tutoriels sur la manière de structurer et de modéliser une application de ce type ?

Merci de m'avoir aidé !

JMax

21voto

Tom Tu Points 6766

Vous pouvez utiliser ce que j'appelle le modèle de module require js. Si vous savez qu'un groupe de classes est souvent utilisé ensemble, vous pouvez faire quelque chose comme ceci.

Tout d'abord, vous définissez chaque classe dans un fichier distinct, puis vous définissez un module pour les regrouper.

Module.js

define([

    './models/FirstModel',
    './models/SecondModel',
    './views/FirstView',
    './views/SecondView',
    'txt!./templates/template.tpl'

], function(FirstModel, SecondModel, FirstView, SecondView, template) {

    return {
        FirstModel: FirstModel,
        SecondModel: SecondModel,
        FirstView: FirstView,
        SecondView: SecondView,
        template: template
    }

});

Et ensuite, lorsque vous voulez utiliser une classe de ce module, il suffit de faire

define(['./Module'], function(Module) {

    var AView = Module.FirstView.extend({

        model: Module.FirstModel,

        render: function() {

            this.html(_.template(Module.template)(this.model.attributes));

            if (something) {

                this.$el.append(new Module.SecondView().render().el);
            }
        }
    })

    return AView;
});

Je ne crois pas qu'en utilisant des modules définis avec requirejs, nous devrions retourner une instance - nous devrions toujours retourner un constructeur ou un objet.

Vous devriez totalement adopter la définition et l'exigence - avec le temps, vous commencerez à l'aimer - sans avoir à penser à ajouter/suivre les dépendances etc. partout à la main ou (si 2005 !) avoir la plupart des choses dans un seul fichier :)

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