Проверка формы Ember

Я новичок в Эмбер, и я думаю о том, что должно быть довольно просто. Просто пытаюсь проверить форму на самом деле. Использование ember-форм и ember-валидаций.

Вот часть структуры, я буду достаточно исчерпывающей, чтобы вы могли добраться до сути, но на самом деле не так много кода:

 /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 в шаблоне).

РЕДАКТИРОВАТЬ: нет ошибки или что-то в консоли, проверка не вызывается.

Спасибо за вашу помощь!

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);
  }
});
Другие вопросы по тегам