Пользовательское сообщение проверки SimpleSchema не отображается

Я пытаюсь реализовать пользовательскую функцию проверки, которая может возвращать либо true (если поле допустимо), либо какое-то пользовательское сообщение об ошибке. Вот моя текущая попытка:

global.Messages = Models.Messages = new Mongo.Collection 'messages'

MessagesSchema = new SimpleSchema({
  content: {
    type: String,
    label: "Message",
    max: 200,
    custom: ->
      if @obj.content.includes("a")
        true
      else
        "not contain a"
}, {tracker: Tracker})

Messages.attachSchema MessagesSchema

Это надуманный пример, но все же он не работает. Выполняется условное выражение в функции custom, и когда возвращается true, запись сохраняется. Однако если возвращается "not contain a", оно не становится проверочным сообщением, отображаемым на клиенте. Там просто написано content is invalid, и я не знаю, как настроить это сообщение. Вот код шаблона:

  {{#autoForm collection="Messages" id="insertMessageForm" type="insert"}}
    <fieldset>
      <legend>Add message</legend>
      {{> afFieldInput type='text' name='content'}}
      {{#if afFieldIsInvalid name='content'}}
      <span class="help-block">{{afFieldMessage name='content'}}</span>
      {{/if}}
    </fieldset>
    <button type='submit' class='btn btn-primary'>Insert</button>
  {{/autoForm}}

person max pleaner    schedule 02.05.2017    source источник


Ответы (1)


Было несколько проблем с моим исходным кодом.

Во-первых, я не указал, как я требую SimpleSchema, но это должно быть сделано так; здесь используется новый пакет node-simpl-schema, на который мигрировал meteor-simple-schema:

SimpleSchema = require('simpl-schema').default
SimpleSchema.extendOptions(['autoform']);

Сообщения проверки сопоставляются с ключами:

SimpleSchema.setDefaultMessages
  messages:
    en: 
      "notA": "doesnt contain a"

Хэши messages и en необходимы для правильной структуры.

важный момент: возвращаемое значение custom не является сообщением, которое отображается на клиенте. Это ключ, указывающий на запись в объекте сообщений по умолчанию.

Например:

custom: ->
  if @obj.content.includes("a")
    true
  else
    "notA"

Это приведет к отображению сообщения "doesnt contain a"

person max pleaner    schedule 02.05.2017