Ember.js 信息共享与验证

Ember.js 信息共享与验证,ember.js,Ember.js,人们如何处理客户端验证和EMBE 是否有任何现成的或插件来处理验证,或者人们只是自己滚动?我会使用一个模型/持久层,它使用一个传统的“错误”对象来保存模型上的验证错误 由于Ember在观察更改时非常出色,因此我将观察ChangedErrors对象以确定是否应该显示验证消息 在我当前的设置中,我使用as框架,因为它使用Ember作为视图层,并且具有强大的模型/持久性层。这一层允许我在模型级别定义验证。每次我尝试持久化一个模型时,它都会被验证并抛出一个错误。在我看来,此错误会中止“理想”路径,并且不

人们如何处理客户端验证和EMBE


是否有任何现成的或插件来处理验证,或者人们只是自己滚动?

我会使用一个模型/持久层,它使用一个传统的“错误”对象来保存模型上的验证错误

由于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');