根据字段值设置Keystone List“noedit”?

时间:2017-07-02 14:04:54

标签: keystonejs

我想仅在对象未发布时才能使我的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吗?我试图阻止该对象在“发布”之后被修改,并且我的例子很简单。

2 个答案:

答案 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,其效果与我希望的完全相同。