[英]Setting a dynamic default value for a field in Keystone (for a url slug)
[英]Set Keystone List "noedit" based on field value?
我想让我的 Keystone List 对象只有在对象未发布时才可编辑。 这是我简化的列表定义:
var Campaign = new keystone.List('Campaign', {
nodelete: true,
track: {
createdAt: true,
},
});
Campaign.add({
...,
publish: {
type: Types.Boolean,
required: false,
initial: false,
dependsOn: {
publishedOn: '',
},
},
publishedOn: {
type: Types.Datetime,
label: 'Published On',
hidden: true,
},
});
仅当publishedOn
不为空时才可以设置noedit
吗? 我试图防止对象在“发布”后被修改,并且缺少示例。
列表或字段的noedit
属性是模型定义的一部分,而不是单个项目定义的一部分。 除非您想将其应用到整个字段或模型,否则无法在管理 UI 中将单个项目标记为不可编辑。
如果您不太担心清晰度,而更担心确保无法对其进行编辑,则可以尝试以下操作:
Campaign.schema.post('init', function () {
if (this.published) this.invalidate('Published items cannot be edited');
});
如果您在发布项目后尝试保存项目,这将导致引发错误。
虽然您可以使用dependsOn: { published: { $exists: true } }
来过滤字段,但这会隐藏信息。
有趣的是,我能够让publish
字段简单地检查自身:
Campaign.add({
...,
publish: {
type: Types.Boolean,
required: false,
initial: false,
dependsOn: {
publish: false,
},
},
...,
});
现在它只显示publish
是否为false
,它的工作方式与我希望的完全一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.