我正在玩aurelia-validatejs,并且能够验证页面上的简单字段。在同一页上,我尝试初始化一个对象并将验证绑定到该对象,但该对象停止工作:
user_data:IUserData = {
Login:"",
Id : null,
UserProfile: {
UserId: null
},
Permissions: null
};
constructor(){
this.reporter = ValidationEngine.getValidationReporter(this.user_data);
// if I just use this and not user_data object,
// it works and error message is displayed in UI
this.validator = new Validator(this.user_data)
// when I use this.user_data (user_data object), it does validate
// and I can see validation result on console, but it's not shown in UI
.ensure('Login').required().length({minimum: 3, maximum:10});
this.observer = this.reporter.subscribe(result => {
console.info(result);
});
}
有人提到validatejs寻找一个标签,而我确实拥有它,当我在this
对象上初始化时它就起作用了,但是只要我想在this.user_data属性上进行验证,它就不会在UI中显示,但是我可以看到它在控制台上。
<form action="" submit.delegate="createUser()">
<div class="input-group ${user_data.Login | loginClass}">
<label></label>
<input placeholder="Login" type="text" class="form-control"
keyup.delegate="validate()" value.bind="user_data.Login & validate">
</div>
</form>
这是行不通的,但是如果我像这样清除user_data:
user_data:IUserData = {
Login:"",
Id : null,
UserProfile: {
UserId: null
},
Permissions: null
};
constructor(){
this.reporter = ValidationEngine.getValidationReporter(this);
//if I just use this and not user_data object,
//it works and error message is displayed in UI
this.validator = new Validator(this)
.ensure('Login').required().length({minimum: 3, maximum:10});
this.observer = this.reporter.subscribe(result => {
console.info(result);
});
}
和
<form action="" submit.delegate="createUser()">
<div class="input-group ${user_data.Login | loginClass}">
<label></label>
<input placeholder="Login" type="text" class="form-control"
keyup.delegate="validate()" value.bind="Login & validate">
</div>
</form>
这有效,并显示在UI中。我在stackoverflow上进行了一些搜索,并得到了一些相似的结果(我的问题是相似的。如果我不在对象上使用它,则会在UI上显示错误消息,但是当我尝试在对象上使用它时,它将在控制台上登录,但是它不会显示在用户界面中)
我也发现了这一点,但并没有太大帮助。
我发现了另外一个也没有太大帮助。
我知道有很多文章可能会使这个问题标记为重复,我要问的原因是aurelia是相当新的技术,并且东西经常在变化。
提前致谢!
所以我挖了一点,问Gitter的开发人员。事实证明,这是validatejs插件中的错误。
进行了最近的更改以使所有类都可以使用某些内容,并且在完成更改后,即使我们提供了不同的模型,validatejs也会在同一模型上寻找validateError Reporter。
一个小小的变通办法是
this.__validationReporter__ = ValidationEngine
.getValidationReporter(this.user_data);
代替:
this.reporter = ValidationEngine.getValidationReporter(this.user_data);
我已经报告了此问题,一旦他们提出了建议,就会进行更新。
现在我要使用
this.__validationReporter__ = ValidationEngine
.getValidationReporter(this.user_data);
或者另一种解决方法是将其降级到0.3.x,因此不建议这样做,因为可能已经进行了一些重要更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句