Установить параметр Keystone List noedit на основе значения поля?

Я хотел бы сделать мой объект 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,
  },
});

Можно ли установить noedit только в том случае, если publishedOn не равно нулю? Я пытаюсь предотвратить изменение объекта после его «публикации», и мне не хватает примеров.


person Brandon    schedule 02.07.2017    source источник


Ответы (2)


Свойство noedit для списка или поля является частью определения модели, а не частью определения отдельного элемента. Невозможно пометить отдельный элемент как нередактируемый в пользовательском интерфейсе администратора, если только вы не хотите применить его к полю или модели в целом.

Если вы меньше беспокоитесь о ясности и больше беспокоитесь о том, чтобы ее нельзя было отредактировать, вы можете попробовать следующее:

Campaign.schema.post('init', function () {
    if (this.published) this.invalidate('Published items cannot be edited');
});

Это приведет к возникновению ошибки, если вы попытаетесь сохранить элемент после его публикации.

Хотя вы можете использовать dependsOn: { published: { $exists: true } } для фильтрации полей, это скроет информацию.

person noviny    schedule 03.07.2017

Интересно, что я смог заставить поле publish просто проверять себя:

Campaign.add({
  ...,
  publish: {
    type: Types.Boolean,
    required: false,
    initial: false,

    dependsOn: {
      publish: false,
    },

  },
  ...,
});

и теперь он показывает только, является ли publish false, что работает именно так, как я и надеялся.

person Brandon    schedule 06.07.2017