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, me montrent qu'une vue est liée à 1 modèle.

Disons que j'ai une petite application pour stocker et gérer les coordonnées (un carnet d'adresses) J'ai plusieurs utilisateurs qui peuvent se connecter et ils ont chacun leur propre collection de contacts.

La vue détaillée de l'utilisateur serait liée au modèle utilisateur qui correspond aux contacts

Mais dis que je voudrais montrer une grille combinant ces deux axes X montrant tous les contacts dans l'axe de l'application Y indiquant tous les utilisateurs,

Comment cela marche-t-il? Dois-je créer un nouveau modèle pour cela, pour me lier à une nouvelle vue?

Vous avez l'idée, c'est juste un exemple théorique, je ne développe pas cette application, mais c'est pour avoir l'idée d'avoir une vue combinant plusieurs modèles

Dans ce cas, je considérerais un modèle dynamique avec vos deux sous-modèles. Dans votre gestionnaire d'itinéraire, vous pouvez 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, rien ne vous empêche de passer séparément les modèles:

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

Je préfère toujours l'approche composite du premier parce qu'il ne confond pas ce qu'est le modèle.

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 coup d'oeil à Backbone.Model.extend() ainsi