【问题标题】:Ember form validationEmber 表单验证
【发布时间】:2015-08-27 09:13:31
【问题描述】:

我对 Ember 有点陌生,我正在做一些应该很简单的事情。只是试图实际验证表单。 使用ember-formsember-validations

这是结构的一部分,我会非常详尽,所以你可以进入重点,但代码真的不多:

 /app
   /controllers
     /admin
       /create-user.js
   /models
     /admin
       /create-user.js
   /routes
     /admin
       /create-user.js
   /templates
     /admin
       /create-user.js

首先,我不确定它的结构是否良好,尤其是模型。

型号:

import DS from 'ember-data';
import EmberValidations from 'ember-validations';

export default DS.Model.extend(EmberValidations, {
  entity: DS.attr()
}).reopen({
  validations: {
    entity: {
     presence: true,
     length: { minimum: 5 }
    }
  }
});

控制器:

import Ember from 'ember';

export default Ember.Controller.extend({
  actions: {
    createUser() {
      console.log("create");
    }
  }
});

路线:

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return this.store.createRecord('admin/create-user');
  }
});

模板:

<h3>Create User</h3>

<div class="row">
  <div class="col-sm-6">
    {{#em-form action="createUser" model=admin/create-user}}
      {{em-input
        label="Name / Entity"
        property="entity"
        placeholder="The name of the user or the entity"}}

    {{/em-form}}
  </div>
</div>

我知道我遗漏了一些东西,我很确定它与模型有关(我尝试了很多东西,例如模板中的model=admin/create-user)。

编辑:控制台中没有错误或其他任何内容,只是不调用验证。

感谢您的帮助!

【问题讨论】:

    标签: javascript validation ember.js ember-data ember-validations


    【解决方案1】:

    首先让我感到震惊的是,您永远不会在代码中的任何地方通过以下方式检查数据是否有效:

    // Somewhere in your controller
    this.get('isValid');
    

    第二个是您的验证是在控制器而不是模型上定义的。如果您的控制器扩展了 ObjectController(现已弃用),它会自动将属性代理到模型,那将非常有用。

    如果您要扩展 Controller 并且想要验证模型,则需要稍微不同地定义它们:

    validations: {
      'model.entity': {
        presence: true,
        length: { minimum: 5 }
      }
    }
    

    第三个是您实际上从未通过路由将模型实例传递给控制器​​(即使验证仍然有效):

    export default Ember.Route.extend({
      model: function() {
        // assuming you're using Ember Data
        // find the model with id of 1
        return this.store.find('admin/create-user', 1);
      }
    });
    

    【讨论】:

    • 是的,刚刚移动了模型中的验证,重新打开。那应该可以解决您所说的第一件事和第二件事。所以我会尝试用你给我的第三个代码做点什么。谢谢!
    • @Cohars - 验证仍然可以保留在控制器中。您无需将它们移动到模型中。您只需要在属性名称前包含model.
    • 嗯,我实际上发现它在模型中更好。我在路由中添加了return this.store.createRecord('admin/create-user');,所以现在我的模型出现在 ember 调试器中(当然更好)。我仍然无法触发验证。正在努力。
    • @Cohars - 如果您将验证移至模型,则您的模型需要在其 extends 调用中包含 EmberValidations。然后你会从控制器调用model.get('isValid') 来触发验证。
    • 是的,我确实包含了它。我认为 ember-validation 正在验证用户类型,不是吗? model.get('isValid') 只返回真或假,但我不知道哪个规则不被遵守。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    相关资源
    最近更新 更多