我可以看到字段的好解释,以及它们的构成,在这里:https://github.com/keystonejs/keystone/tree/v4.0.0-beta.5/fields
如何添加自定义字段?
添加一个自定义字段(在我自己的项目中进行版本化,这取决于keystone,或者可能已经足够通用,可以推送到npm)在梯形图设置脚本中导入它并以某种方式改变keystone
实例或其他什么,以便它也加载我的字段与内置的?
编辑:
用例位于管理界面的上下文中(例如,您有一个用户keystone模型,并且您希望用户表单具有一个新的自定义字段,其UI是您实现的任意反应组件)
答案 0 :(得分:0)
该框架支持存储字段,如本地文件,s3,azure,cloudinary图像和嵌入字段。这可能会满足您的文件字段需求。
自定义字段
keystone wiki似乎有keystonejs wiki的简短教程,在撰写本文时,管理界面不支持自定义类型。
wiki中的示例代码包含信用卡号的验证方法,因此这可能是您正在寻找的功能类型。
以下是自定义类型的简短示例。这是一个只接受杰夫或亚历山大作为有效值的字段。您可以将其放在自己的myNameType.js文件中。
var keystone = require('keystone');
var util = require('util');
/*
Custom FieldType Constructor
@extends Field
@api public
*/
function myName(list, path, options) {
// add your options to this
// call super_
this._nativeType = Text;
myName.super_.call(this, list, path, options);
}
/* inherit Field */
util.inherits(myName, keystone.Field);
/* override or add methods */
myName.prototype.validateInput = function(data) {
console.log('validate my name');
var isValid = false;
if (data && (data.toLower() === 'jeff' || data.toLower() === 'alexander')) {
isValid = true;
}
return isValid;
};
然后在keystonejs启动文件中注册您的类型:
// Require keystone
var keystone = require('keystone');
// add a new custom Field Type
Object.defineProperty(
keystone.Field.Types,
'MyName',
{
get: function() {
// or whatever your path is
return require('./myName.js');
}
}
);
从那里你可以在模型中使用它(记得由于缺乏管理UI支持而将其设置为隐藏):
var keystone = require('keystone');
var Types = keystone.Field.Types;
var Person = new keystone.List('Post', {
map: { name: 'title' },
autokey: { path: 'slug', from: 'title', unique: true },
sortable: 'unshift',
perPage: 5,
track: true,
autocreate: true
});
Person.add({
name: { type: Types.MyName, label: 'My Name', hidden: true },
heightInInches: { type: Types.Number, label: 'Height (inches)' },
});
Person.register();