2

我正在尝试在我的流星应用程序中实现Mesosphere以进行验证,但似乎 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 以创建验证对象。例如:

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

提交后,它会将必填字段记录为错误,这很奇怪,因为我确实在该字段中输入了一些内容。它没有提到不正确的长度或格式。它跳过“错误长度”消息,我无法在对象的任何地方找到该消息。

所以我的问题是我做错了什么没有为该表单字段的错误输入获得正确的消息?谢谢 : )

此外,愿意就其他验证包提出建议。Mesosphere 利用 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);
  }
4

1 回答 1

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

希望这可以帮助。

于 2014-01-27T19:04:01.570 回答