我想仅在对象未发布时才能使我的Keystone List对象可编辑。这是我简化的列表定义:
CREATE TABLE `catbeni` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Nome` varchar(255) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
仅当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,
},
});
不为空时才可以设置noedit
吗?我试图阻止该对象在“发布”之后被修改,并且我的例子很简单。
答案 0 :(得分:0)
列表或字段的noedit
属性是模型定义的一部分,而不是单个项的定义的一部分。除非您想将它作为一个整体应用于字段或模型,否则无法在管理UI中将单个项目标记为不可编辑。
如果您不太担心清晰度,并且更担心确保无法编辑,您可以尝试以下方法:
Campaign.schema.post('init', function () {
if (this.published) this.invalidate('Published items cannot be edited');
});
如果您尝试在项目发布后保存该项目,则会导致错误。
虽然您可以使用dependsOn: { published: { $exists: true } }
来过滤字段,但这会隐藏信息。
答案 1 :(得分:0)
有趣的是,我能够让publish
字段自行检查:
Campaign.add({
...,
publish: {
type: Types.Boolean,
required: false,
initial: false,
dependsOn: {
publish: false,
},
},
...,
});
现在只显示publish
是否为false
,其效果与我希望的完全相同。