繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM