2014-05-14 17 views
6

È possibile limitare le opzioni visualizzate disponibili in un tipo di relazione di KeystoneJS specificando una condizione di valore?KeystoneJS tipo di relazione, limite di articoli disponibili per valore di campo

Fondamentalmente, un modello ha due serie di campi di matrice, invece di lasciare che l'utente amministratore selezioni qualsiasi elemento dal campo, vorrei limitare solo agli elementi che fanno parte di una raccolta specifica _id.

+1

Questa domanda non è abbastanza chiara. Non capisco cosa stai cercando di fare e qual è il problema. Per favore, spiegane altro. E condividi il codice di ciò che hai già per affrontare questo problema. –

risposta

6

Non so se questa è esattamente la funzione che stai cercando, ma puoi specificare un'opzione filter nel campo Relationship come oggetto e filtrerà i risultati in modo che vengano visualizzati solo quelli che corrispondono.

Ogni proprietà nell'oggetto filter dovrebbe essere un valore da corrispondere nel relativo schema, oppure può essere un valore dinamico corrispondente al valore di un altro path nello schema (precedere il percorso con un :).

Ad esempio:

schema utente

User.add({ 
    state: { type: Types.Select, options: 'enabled, disabled' } 
}); 

Messaggio Schema

// Only allow enabled users to be selected as the author 
Post.add({ 
    author: { type: Types.Relationship, ref: 'User', filter: { state: 'enabled' } } 
}); 

O per un esempio di dinamica, immaginate di avere un ambiente role sia per Posts e Users . Vuoi solo abbinare gli autori che hanno lo stesso role come post.

schema utente

User.add({ 
    userRole: { type: Types.Select, options: 'frontEnd, backEnd' } 
}); 

Messaggio Schema

Post.add({ 
    postRole: { type: Types.Select, options: 'frontEnd, backEnd' }, 
    // only allow users with the same role value as the post to be selected 
    author: { type: Types.Relationship, ref: 'User', filter: { userRole: ':postRole' } } 
}); 

Nota che questo non è effettivamente implementato come convalida di back-end, è solo implementato nel Admin UI. Quindi è più un miglioramento dell'usabilità che una restrizione.

1

Per espandere la risposta di Jed, penso che la proprietà corretta (almeno nell'ultima versione di KeystoneJS 0.2.22) sia "filtri" anziché "filtro". 'filtro' non funziona per me.