Проверка формы 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);
}
});