如何在keystonejs中添加预挂机?

时间:2019-01-23 04:05:08

标签: keystonejs

我想添加多个选择选项字段。但是文档state不允许多重选择。但建议针对这种情况进行预钩。

  

在模型中存储字符串或数字。在中显示为选择字段   管理员界面。不允许选择多个项目。如果你   要提供多个值,可以使用TextArray或NumberArray,   尽管两者都不会具有相同的约束输入。 您可以限制   使用预保存的钩子选择这些选项。

我正在搜索预钩,但它似乎来自猫鼬。就我而言,我使用Keystone创建模型,以便可以在管理页面中使用它

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

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

MyModel.add({
    aField: { type: Types.TextArray, required: false, initial: true },
});

那么我该如何创建预钩?例如,我想限制将TextArray设置为('a','b','c')?

1 个答案:

答案 0 :(得分:0)

我已经设置了类似这样的预保存钩子(或类似的东西。未测试此代码)。

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

/**
 * Musician Model
 * ==========
 */

var Musician = new keystone.List('Musician', {
    map: { name: 'title' },
    autokey: { path: 'slug', from: 'title', unique: true },
});

Musician.add({
    title: { type: String, required: true },
    published: { type: Types.Boolean, default: false },
    musicianId: { type: String, note: noteUpdateId },    
});

Musician.schema.pre('save', function (next) {
    console.log(this.title);
    console.log(this.isNew);
    if (this.isNew) {
        // generates a random ID when the item is created
        this.musicianId = Math.random().toString(36).slice(-8);
    }
    next();
});

Musician.defaultColumns = 'title, published, musicianId';
Musician.register();