我们第一次使用Keystone(版本4.0.0-beta.8)作为我们的Node.js CMS,我们非常喜欢它。但是,我们遇到了CMS的一个重要缺失功能,即在管理员视图中添加自定义组件。
我们希望实现的是将自定义React组件添加到其中一个 Keystone管理界面,并使用field watch function
中的数据填充它此组件应仅对其中一个列表模型可见。现在,唯一的方法是编辑其中一个核心文件:
{(this.props.params.listId === 'my-list-model') ? (
<MyComponent>{this.props.params.listId}</MyComponent>
) : null }
并在其周围添加一些条件渲染:
import keystone from 'keystone';
import { someFunction } from './myFunctions';
var MyListModel = new keystone.List('MyListModel', {
map: { name: 'title' },
});
MyListModel.add({
title: { type: String, required: true },
data: { type: Types.Code, language: 'json', watch: 'title', value: watchTitle, noedit: true },
});
MyListModel.register();
function watchTitle(callback) {
if (this.title) {
function cb(error, result) {
if (result) {
// Send result to React Component in Admin screen
}
callback(error, result);
}
someFunction(this.title, cb);
} else {
callback(null, '');
}
}
这样可行,但由于您要覆盖核心文件,因此不适合使用。但是,如果我知道如何使用Keystone列表模型声明中的数据提供此自定义组件,我可以克服这个缺点:
在: /server/models/MyListModel.js
this.storage.clear();
有没有人遇到同样的问题,或者有任何线索如何在Keystone的反应管理视图中将数据发送到自定义组件?
非常感谢!