2014-01-03 3 views
2

Я пытаюсь реализовать Mesosphere для проверки в моем приложении meteor, но похоже, что Mesosphere не подбирает некоторые из встроенных проверок, которые я перечислил.Meteor.js Validation w/Mesosphere

Я пробовал только одну проверку для форматирования электронной почты и ее требуемую длину. Например:

Mesosphere({ 
    name: 'signupForm', 
    method: 'signupUser', 
    fields: { 
     email: { 
      required: true, 
      format: 'email', 
      rules: { 
       exactLength: 4 
      }, 
      message: 'Wrong length' 
     } 
    }, 
    onFailure: function (errors) { 
     messages = []; 

     messages = _.map(errors, function (val, err) { 
      console.log(val.message); 
     }); 
    }, 
    onSuccess: function (data) { 
     alert("Totally worked!") 
    } 
}); 

«OnFailure» (и OnSuccess) обратного вызова, кажется, работает, потому что это вход что-то, когда я отправить форму. Который заставляет меня поверить, что я правильно настроил его на отправке формы. Там вы передаете объект формы в Mesosphere, чтобы создать объект validationObject, если я его правильно понимаю. Например:

var validationObject = Mesosphere.signupForm.validate(accountData); 

После отправки, это вход Обязательное поле как ошибка, которая является странным, потому что я сделал что-то типа в поле. В нем не упоминается некорректная длина или формат. Он пропускает сообщение «Неверная длина», и я не могу найти это сообщение в объекте в любом месте.

Так что мой вопрос в том, что я делаю неправильно, чтобы не получить правильное сообщение для неправильного ввода для этого поля формы? Спасибо:)

Также желаем принять рекомендации по другим пакетам проверки. Мезосфера использует функции сервера/клиента Meteor для проверки, поэтому казалось, что это хорошее место для начала.

Шаблон:

<template name="signup"> 
     <form name="signupForm" id="signup-form" class="panel" action="#"> 
     <div class="form-group"> 
      <label for="email">Email</label> 
      <input type="text" name="email" id="email" class="form-control" /> 
     </div> 

     <div class="form-group"> 
      <label for="password">Password</label> 
      <input type="password" name="password" id="password" class="form-control" /> 
     </div> 

     <div class="form-group"> 
      <input type="submit" value="Sign Up" id="create-account" class="btn btn-success pull-right"> 
     </div> 
     </form> </template> 

Что вызывает этот метод в соответствующем файле:

signupUser: function(accountData) { 
    var uid = Accounts.createUser(accountData); 
    } 
+0

Можете ли вы добавить шаблон html на свой вопрос? –

+0

Добавлен шаблон и соответствующий метод. Спасибо Дэвиду. – Colton45

+1

Я потратил около 20 минут на это, работая назад от примера в пакете, и я не понял этого. Он не обновлялся через 5 месяцев, так что это красный флаг. Вы можете взглянуть на [autoform] (https://github.com/aldeed/meteor-autoform). Я не пробовал это, потому что мы написали нашу собственную библиотеку проверки (еще не открытую). –

ответ

0

Поэтому в основном то, что я вижу в том, что ваши правила не отражают, как форма будет подтверждена. У вас есть электронная почта, который должен соответствовать формату электронной почты, но тогда у вас есть правило, которое говорит, что это должно быть ровно 4 символов .. лучше определение поля будет выглядеть следующим образом:

fields: { 
    email: { 
     required: true, 
     format: 'email', 
     message: 'Please enter a valid email address' 
    }, 
    password: { 
     required: true, 
     rules: { 
      minLength: 6, 
      maxLength: 30, 
     }, 
     message: "Password must be between 6 and 30 characters" 
    } 
} 

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

https://github.com/copleykj/meso-test

Надеется, что это помогает.