2017-02-26 3 views
1

Ich versuche, geschachtelte Kategorien für Post-Modell zu implementieren.Keystone.js verschachtelte Kategorien

Was ich habe:

Post.add({ 
    title: { type: String, required: true }, 
    state: { type: Types.Select, options: 'draft, published, archived', default: 'draft', index: true }, 
    author: { type: Types.Relationship, ref: 'User', index: true }, 
    publishedDate: { type: Types.Date, index: true, dependsOn: { state: 'published' } }, 
    content: { 
     extended: { type: Types.Html, wysiwyg: true, height: 300 }, 
    }, 
    categories: { type: Types.Relationship, ref: 'PostCategory', index: true } 
}); 

Und Kategorie

PostCategory.add({ 
    name: { type: String, required: true }, 
    subCategories: { type: Types.TextArray } 
}); 

Jetzt habe ich eine Liste der Unterkategorien zu den einzelnen Kategorien hinzufügen können. Was ich nicht tun kann, ist Unterkategorien beim Erstellen eines Beitrags anzuzeigen. Auch wenn ich die Kategorie ändere, muss ich Unterkategorien für die ausgewählte Kategorie laden.

Mein Plan war es, dies mit Watch-Funktionalität zu erreichen, aber es scheint nur auf Speichern funktioniert.

Eine andere Sache, ich habe darüber nachgedacht war Unterkategorien als Beziehung hinzuzufügen, siehe Ref:

categories: { type: Types.Relationship, ref: 'PostCategory.subCategories', index: true } 

Aber es ist nicht so gut funktioniert.

Also, wenn jemand irgendwelche Ideen hat, wie man das erreicht, bitte teilen. Danke.

P.S. Zögern Sie nicht, weitere Informationen zu erfragen.

Antwort

0

Ich habe verschachtelte Kategorien durch ein neues Modell ‚PostSubCategory‘ schaffen, die der Benutzer erlaubt, die übergeordnete Kategorie für das Kind Kategorie zuweisen, wenn es das Kind Kategorie erstellen:

var keystone = require('keystone'); 
var Types = keystone.Field.Types; 

/** 
* PostSubCategory Model 
* ================== 
*/ 

var PostSubCategory = new keystone.List('PostSubCategory', { 
    autokey: { from: 'name', path: 'key', unique: true }, 
}); 

PostSubCategory.add({ 
    name: { 
    type: String, 
    required: true 
    }, 
    parentCategory: { 
    type: Types.Relationship, 
    ref: 'PostCategory', 
    required: true, 
    initial: true 
    } 
}); 


PostSubCategory.relationship({ ref: 'Post', path: 'subcategories' }); 

PostSubCategory.register(); 

Da ist in meinem Post.js, ich füge ein Feld auf diesem Gebiet nur eine Unterkategorie mit einem Filter zu wählen, um von Unterkategorien auswählen, die ausgewählten Kinder der übergeordneten Kategorie sind:

subcategory: { 
    type: Types.Relationship, 
    ref: 'PostSubCategory', 
    many: false, 
    filters: { parentCategory: ':categories' } 
} 

ich bin nicht sicher, wie gut dies würde für tiefere Verschachtelung arbeiten, und Ich habe ein Problem in t Er bearbeitet Post-Admin-UI, bei dem das Ändern der übergeordneten Kategorie für einen Post die verfügbaren Unterkategorien erst beim Speichern und Aktualisieren aktualisiert. Aber es hat mich weit genug gebracht, um Eltern/Kind-Kategorien zum Arbeiten zu bringen.