2017-09-16 2 views
0

Je suis en train de me familiariser avec KeystoneJS et d'essayer d'afficher les relations plusieurs-à-plusieurs dans l'AdminUI.KeystoneJS, afficher les relations plusieurs-à-plusieurs dans le modèle AdminUI

J'ai deux modèles, playlist et trailer. Ils ont beaucoup à plusieurs, définis comme suit:

modèles/Playlist.js

Playlist.add('Playlist', { 
 
     name: { type: Types.Text, initial: true, required: true, index: true, unique: true }, 
 
     description: { type: Types.Textarea, initial: true, required: true }, 
 
    } 
 
); 
 

 
Playlist.relationship({ ref: 'Trailer', refPath: 'title', path: 'trailers' });

modèles/Trailer.js

Trailer.add('Trailer', { 
 
\t \t title: { type: Types.Text, required: true, initial: true, index: true }, 
 
\t \t playlists: { type: Types.Relationship, ref: 'Playlist', many: true }, 
 
\t } 
 
)

La relation est modélisée correctement dans MongoDB; Il y a un tableau d'ObjectID dans le champ des bandes-annonces de la playlist. Mais quand je regarde la liste de lecture dans l'AdminUI, je vois juste "Aucune bande-annonce liée ..."

Pourquoi cela ne fonctionne-t-il pas? Je veux voir la relation dans l'AdminUI.

La documentation autour de cette fonctionnalité est inutile. Juste des extraits de code aléatoires sans aucun contexte. J'ai aussi suivi l'exemple de Practical Keystone JS sans aucune chance.

Répondre

0

En ce qui concerne les options de relation:

chemin est le nom que vous voulez pour le champ sur le modèle. Dans ce cas, nous pourrions appeler cela «trailers».

réf est le modèle référencé (celui qui a le champ de relation). Dans ce cas, «Trailer».

refPath est le champ dans le modèle référencé qui a la relation. Dans ce cas, "playlists".

Essayez ceci:

// modèles/Playlist.js

var Playlist = new keystone.List('Playlist'); 

Playlist.add({ 
    name: { type: Types.Text, initial: true, required: true, index: true, unique: true }, 
    description: { type: Types.Textarea, initial: true, required: true }, 
}); 

Playlist.relationship({ path: 'trailers', ref: 'Trailer', refPath: 'playlists' }); 

// modèles/Trailer.js

var Trailer = new keystone.List('Trailer'); 

Trailer.add({ 
    title: { type: Types.Text, required: true, initial: true, index: true }, 
    playlists: { type: Types.Relationship, ref: 'Playlist', many: true }, 
}); 
+0

Parfait! J'avais complètement mal compris l'option ** refPath **. Merci – Twig2let

+0

Pas de problème du tout. Les docs pourraient être plus clairs à ce sujet. –