31 votes

Backbone.js: vues complexes combinant plusieurs modèles

Jusqu'à présent tous les tests et tutoriels que j'ai essayé, pour obtenir la structure dans ma tête, de me montrer qu'un point de vue est lié à 1 modèle.

disons que j'ai une petite application pour stocker et gérer les informations de contact (un carnet d'adresses) j'ai plusieurs utilisateurs qui peuvent se connecter et ils ont chacun leur propre ensemble de contacts.

l'utilisateur de la vue de détail serait lié à l'utilisateur modèle en va de même pour les contacts

mais dire que j'aimerais afficher une grille combinant ces deux L'axe X montrant tous les contacts dans l'application Axe Y indiquant tous les utilisateurs,

comment cela fonctionne? dois-je créer un nouveau modèle pour le présent, de se lier à un nouveau point de vue?

vous avez l'idée, c'est juste un exemple théorique, je ne suis pas du bâtiment que l'app, mais à obtenir l'idée d'avoir une vue sur la combinaison de plusieurs modèles

50voto

Brian Genisio Points 30777

Dans ce cas, je voudrais examiner un modèle dynamique avec vos deux sous-modèles. Dans votre gestionnaire d'itinéraire, vous pourriez faire quelque chose comme ceci:

var model = new Backbone.Model();
model.set({contacts: new ContactsModel(), users: new UsersModel()});
var view = new GridView({model: model});

Bien sûr, il n'y a rien qui vous empêche de passer dans les modèles séparément:

var contacts = new ContactsModel();
var users = new UsersModel();
var view = new GridView({model: contacts, users: users})

Je préfère encore le composite à l'approche de la première car elle permet de ne pas confondre ce que le modèle est.

7voto

ximonn Points 49

Vous pouvez également envisager de fusionner les deux modèles, si vous êtes sûr qu'ils n'utilisent pas les mêmes paramètres.

var modelA = new myModel({ color: "blue" });
var modelB = new otherModel({ age: 35 });

var superModel = new Backbone.Model();
superModel.set(modelA);
superModel.set(modelB);

console.log("color:", superModel.get("color"));
console.log("age:", superModel.get("age"));

jetez un oeil à l' Backbone.Model.extend() ainsi

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