Ember.js 信息共享与验证
人们如何处理客户端验证和EMBEEmber.js 信息共享与验证,ember.js,Ember.js,人们如何处理客户端验证和EMBE 是否有任何现成的或插件来处理验证,或者人们只是自己滚动?我会使用一个模型/持久层,它使用一个传统的“错误”对象来保存模型上的验证错误 由于Ember在观察更改时非常出色,因此我将观察ChangedErrors对象以确定是否应该显示验证消息 在我当前的设置中,我使用as框架,因为它使用Ember作为视图层,并且具有强大的模型/持久性层。这一层允许我在模型级别定义验证。每次我尝试持久化一个模型时,它都会被验证并抛出一个错误。在我看来,此错误会中止“理想”路径,并且不
是否有任何现成的或插件来处理验证,或者人们只是自己滚动?我会使用一个模型/持久层,它使用一个传统的“错误”对象来保存模型上的验证错误 由于Ember在观察更改时非常出色,因此我将观察ChangedErrors对象以确定是否应该显示验证消息
在我当前的设置中,我使用as框架,因为它使用Ember作为视图层,并且具有强大的模型/持久性层。这一层允许我在模型级别定义验证。每次我尝试持久化一个模型时,它都会被验证并抛出一个错误。在我看来,此错误会中止“理想”路径,并且不会继续执行工作流,而是会在模板中呈现验证错误。可能有用。它还连接到我将扩展Ember.TextField(或您验证的任何输入类型),并将类绑定与计算属性一起使用。以下是示例: 模板:
<script type="text/x-handlebars" >
{{view App.AlphaNumField
placeholder="alpha-numeric data only"
valueBinding="App.alphaNumInput"}}
</script>
我一直在以与@caliganimus非常相似的方式处理它,但是在文本框外验证焦点并附加错误消息 代码:
App.TextFieldEmpty=Ember.TextField.extend({
focusOut:function(){
var valid=this.get('value')?valid=true:valid=false;
此。$().next(“.err”).remove();
如果(!有效){
this.$().addClass(“无效”)。之后(“此字段为必填项”);
}否则{
此.$().removeClass(“无效”)
}
}
});
模板:
<script type="text/x-handlebars">
{{view App.TextFieldEmpty}}
</script>
{{view App.TextFieldEmpty}
JSBIN:
我们已经创建了自己的文本字段,这些字段会在调焦时引发验证错误,其他事件和其他文本字段会扩展它们:
App.PhoneNumberField = App.TextField.extend({
validate: function(value) {
var self = this.$('input');
var id = self.attr("id");
var e164PhoneNumber = formatE164("AU",value);
var valid = true;
if(self.val().trim().length == 0 ){
valid = true;
}else{
valid = isValidNumber(e164PhoneNumber);
}
if (!valid) {
self.trigger(Storm.invalidInputEvent(id));
this.setErrorMessage("error","Phone Number does not look right");
}else {
self.trigger(Storm.validInputEvent(id));
this.clearMessages();
}
},
keyUp: function(evt) {
if(evt.keyCode >= 37 && evt.keyCode <=40)
{
return;
}
var textValue = this.$("input").val();
var input = this.$().find('input');
var formattedNumber = this.formatInput(textValue);
input.val(formattedNumber);
this.set('data',formattedNumber);
},
value: function() {
var phoneNumber = this.get('data');
if (phoneNumber) {
return phoneNumber;
} else {
return "";
}
}.property('data'),
data: null,
placeholder: function() {
return "";
}.property('placeholder'),
formatInput: function(textValue){
var formattedPhoneNumber = formatLocal("AU",textValue);
return formattedPhoneNumber;
}
});
App.PhoneNumberField=App.TextField.extend({
验证:函数(值){
var self=此。$(“输入”);
var id=self.attr(“id”);
变量e164PhoneNumber=格式E164(“AU”,值);
var valid=true;
if(self.val().trim().length==0){
有效=真;
}否则{
valid=isValidNumber(E164电话号码);
}
如果(!有效){
自触发(风暴失效事件(id));
此.setErrorMessage(“错误”,“电话号码看起来不正确”);
}否则{
自触发(风暴有效输入事件(id));
这个.clearMessages();
}
},
键控:功能(evt){
如果(evt.keyCode>=37&&evt.keyCode我在这方面取得了很多成功
只需使用Ember输入助手,我的表单验证就变得非常干净。您可以使用jQuery验证脚本,将其作为函数放入.js文件中,然后在diInsertElement上调用它
jQuery Validate会在字段下方添加错误消息以及与规则相关的消息,还允许您通过.valid()方法从任何操作或事件触发验证。另一个完全受支持的选项,如果您正在使用引导,则非常合逻辑的选项是使用.In-ember(ember cli)应使用bower进行安装:
bower install --save bootstrap-validation
然后在ember cli build中,必须导入依赖项:
//bootstrap-validator
app.import('bower_components/bootstrap-validator/dist/validator.js');
app.import('bower_components/bootstrap-validator/dist/validator.min.js');
此解决方案允许您在html级别进行验证,让引导程序完成“脏”的工作。对于标准验证,这将简单而轻松地完成工作。您只是在进行验证,还是在一个强大的MVC上,控制器和模型支持您的视图?您能提供一个示例场景吗?是否有任何东西可以钩住rails有效初始化消息?事实上,这是ActiveModel::Validations
(Rails中并不强烈需要)。无论如何,我目前正在为Ember开发这种验证。但这仍在开发中:有一个名为的项目,但它不是100%,并且您的缺点是无法使用Ember视图,您必须用Flame视图替换所有视图。您可以检查一些验证示例,听起来像是一个不错的开源明星也许我们应该扩展En烬本身来拥有这些默认绑定,而不是一个不需要坚实客户端验证的应用程序。作为一个更新-船坞现在有Enter验证,我正在使用并且更喜欢其他。如果你使用Bootstrap,你也应该考虑EMBER验证。是的,这是共同的解决方案。n到客户端验证现在与恩伯。它超级简单,并很好地与集成&两者都是由船坞。
App.MyView = Ember.View.extend({
templateName: 'my-form-template',
didInsertElement: function(){
$("#myForm").validate({
rules:{
fname:{
required: true,
maxlength: 50,
},
lname:{
required: true,
maxlength: 50,
},
email: {
required: true,
email: true,
maxlength: 200,
},
},
messages: {
email: {
email: "Enter a valid email address.",
},
},
});
}
});
bower install --save bootstrap-validation
//bootstrap-validator
app.import('bower_components/bootstrap-validator/dist/validator.js');
app.import('bower_components/bootstrap-validator/dist/validator.min.js');