0

我对 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在模板中)。

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

谢谢你的帮助!

4

1 回答 1

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);
  }
});
于 2015-08-27T01:00:30.600 回答