Aldeed Simple-Schema, как использовать допустимые значения в поле из другого?

Я пытаюсь создать определенную простую схему для коллекции, и я хотел бы убедиться, что:

когда пользователь вводит новый выбор в my selectsCollection, он помещает значение одного из параметров в качестве выбранного значения.

Например:

SelectsCollection.insert({name:"SelectOne",deviceType:"Select",options:["option1","option2","option3"],value:"option4",description:"This is the first select"});

это не должно работать. Я хочу, чтобы он написал только один из 3-х вариантов.

Вот моя схема:

SelectsCollection = new Mongo.Collection('Selects'); //Create a table

SelectsSchema = new SimpleSchema({  
    name:{      
        type: String,
        label:"Name",
        unique:true
    },  
    deviceType:{
        type: String,
        allowedValues: ['Select'],
        label:"Type of Device"
    },
    options:{
        type: [String],
        minCount:2,
        maxcount:5,
        label:"Select Values"
    },
    value:{
        type: String,
        //allowedValues:[options] a kind of syntax
        // or allowedValues:function(){ // some instructions to retrieve  the array of string of the option field ?}
        label:"Selected Value"
    },
    description:{
        type: String,
        label:"Description"
    },
    createdAt:{
        type: Date,
        label:"Created At",
        autoValue: function(){
            return new Date()
        }
    } 
});

SelectsCollection.attachSchema(SelectsSchema);

Есть идеи ? :)

Большое спасибо !


person E.B    schedule 29.06.2017    source источник
comment
Я не думаю, что это можно сделать только с простой схемой. Пожалуйста, уточните, почему вы не можете просто проверить с помощью простого JS, если value находится в массиве options? if(options.indexOf(value) !== -1) { // insert }.   -  person Patrick DaVader    schedule 29.06.2017
comment
Я использовал if(options.indexOf(value) !== -1) { // insert } в пользовательской проверке, как Khang, и вы посоветовали :)   -  person E.B    schedule 30.06.2017


Ответы (1)


Это можно сделать с помощью custom функции проверки поля, внутри этой функции вы можете получить значения из других полей:

SelectsSchema = new SimpleSchema({
  // ...
  options: {
    type: [String],
    minCount: 2,
    maxcount: 5,
    label: "Select Values"
  },
  value: {
    label: "Selected Value",
    type: String,
    optional: true,
    custom() {
      const options = this.field('options').value
      const value = this.value

      if (!value) {
        return 'required'
      }

      if (options.indexOf(value) === -1) {
        return 'notAllowed'
      }
    }
  },
  // ...
});

Подробнее см. здесь custom-field-validation.

person kkkkkkk    schedule 29.06.2017
comment
Благодарю вас ! Оно работает ! только один последний вопрос об этом... что означает: if (options.indexOf(value) === -1)? - person E.B; 30.06.2017
comment
который используется для проверки, не содержит ли options value - person kkkkkkk; 30.06.2017