我正在尝试实现在我的应用程序中使用成员验证库的新联系人的表单验证。我目前正在使用带固定装置的Ember数据,并且我选择了将验证放在模型中,就像这个视频中的示例一样。几天来,我一直在努力解决这个问题,但我似乎仍然不明白为什么验证不起作用。我没有得到任何迹象,错误甚至是开火。
//app/models/contact.js
import DS from "ember-data";
import EmberValidations from 'ember-validations';
//define the Contact model
var Contact = DS.Model.extend(EmberValidations, {
firstName: DS.attr('string'),
lastName: DS.attr('string'),
});
//Create Contact fixtures
Contact.reopenClass({
FIXTURES: [...]
});
Contact.reopen({
validations: {
firstName: {
presence: true,
length: { minimum: 2 }
},
lastName: {
presence: true
}
}
});
export default Contact;我是Ember的新手,有人建议我把下面的逻辑放在路线上,而不是控制器上。我没有看到任何的例子,这是与成员验证,所以我不确定这是否是我的问题有关验证。
app/routes/contacts/new.js
import Ember from 'ember';
export default Ember.Route.extend({
model: function() {
return this.store.createRecord('contact');
},
actions: {
createContact: function() {
var contact = this.get('currentModel');
this.transitionTo('contacts');
contact.save();
alert(contact.errors);
},
cancelContact: function() {
var contact = this.get('currentModel');
contact.destroyRecord();
this.transitionTo('contacts');
}
}
});我的另一个怀疑是我可能没有正确地处理html中的错误?
//app/templates/contacts/new.hbs
{{#link-to 'contacts' class="btn btn-primary"}}Contacts{{/link-to}}
<form>
<label>First Name:</label>
{{input type="text" value=model.firstName}}<br>
<span class="error"></span>
<label>Last Name:</label>
{{input type="text" value=model.lastName}}<br>
<span class="error"></span>
</form>
<button {{action "createContact"}} class="btn btn-primary">Submit</button>
<button {{action "cancelContact"}} class="btn btn-warning">Cancel</button>
<br>这是我的控制器
//app/controllers/contacts.js
import Ember from "ember";
export default Ember.Controller.extend({
});我很享受安博,但这个问题阻碍了我。任何帮助都将不胜感激。
发布于 2015-09-30 23:41:22
我正在仔细研究这件事,并有一些建议。首先,我会说,验证您需要问的地方,如果它是有效的。如果组件是表单,则可能需要在组件上执行此操作;如果希望在保存前确保组件有效,则可能需要在模型上执行此操作;或者,如果存在要检查的属性,则可能需要在某个路由上执行此操作。
无论如何,无论您选择哪种方法,我都强烈建议使用ember-cp-validations 副词。就其价值而言,Stephen (ember.js核心团队)也对这句话做出了贡献。这一切都准备好了,为安博CLI以及。
这个设置实际上非常类似于您正在做的事情,但是与其重新打开类,不如用它定义一个混音(他们的文档中的例子)。为了创建使用的混音,他们有一个名为buildValidations的工厂。好的是你可以在任何一个Ember对象上使用这个。
一旦定义了验证并将其混合到对象的创建中,即:Ember.Object.create(Validations, {});,其中Validations是您在上面创建的混合体(就像在文档中)。你们都准备好了。
在该对象的范围内,现在对象上有一个validations属性,如下所示:
var Validations = buildValidations({
greeting: validator('presence', true)
});
export default Ember.Object.create(Validations, {
greeting: 'Hello World',
actions: {
announce: function() {
alert('The current validation is: ' + this.get('validations.isValid'));
// per property validation is at:
alert('The individual validation is: ' + this.get('validations.attrs.greeting.isValid'));
}
}
})车把:
Looks like the form is {{ validations.isValid }}.
You can also <a {{action announce}}>announce the validation</a>.另外,看看所有的文档,还有更多的属性和用例由这个插件来处理,包括工具栏帮助器、ajax/异步验证解析器和一些验证器。如果你找不到你要找的人,那就做一个function验证器。使用所有的function验证器,简单,使它与ember generate validator unique-username可重用。
希望这能让你从正确的开始开始。这是一个相对较新的项目,但得到了适当的支持,对这些问题的反应也很快。
还应该提到的是,由于这些验证是基于计算属性的,因此它们以"Ember方式“工作,这应该非常有效,包括您的模型。
https://stackoverflow.com/questions/32160872
复制相似问题