我只是想知道在EmberJS中验证表格的一般模式是什么?对于我的App.IndexView我有一个表单,当你点击提交按钮时,目标设置为视图,所以我可以做一些验证。这很有效,直到我需要对有错误的字段做一些事情。我想在有错误的字段中添加一个类但不确定如何操作。 IndexView应该验证表单还是我应该为每个字段创建一个视图来验证它的自我模糊?以下是我在IndexView中的内容。
App.IndexView = Ember.View.extend
create: (model) ->
valid = @_validate model
if valid is true
@get('controller').send 'createUser'
else
# HANDLE THE FIELDS WITH ERRORS
_validate: (model) ->
invalid = []
validations = {
firstName: @_validateString model.get 'firstName'
lastName: @_validateString model.get 'lastName'
email: @_validateEmail model.get 'email'
password: @_validatePassword model.get 'password'
accountType: @_validateString model.get 'accountType'
}
# This will get all of the values then runs uniq to see if the
# form is valid
validForm = _.chain(validations).values().uniq().value()
if validForm.length is 1 and validForm[0]
true
else
# other wise build up an array of the fields with issues
for field, val of validations
if val is false
invalid.push field
invalid
_validateString: (str) ->
return false unless str
if str isnt '' then true else false
_validateEmail: (str) ->
pattern = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
pattern.test str
_validatePassword: (str) ->
return false unless str
if str.length >= 6 then true else false
和模板
<div class="row">
<div class="span12">
<div class="signup">
<form class="form-horizontal offset3">
<div class="control-group">
<label class="control-label" for="first_name">First Name</label>
<div class="controls">
{{ view Ember.TextField placeholder="First Name" required="true" valueBinding='firstName' name='first_name' viewName='firstNameField'}}
</div>
</div>
<div class="control-group">
<label class="control-label" for="last_name">Last Name</label>
<div class="controls">
{{ view Ember.TextField placeholder="Last Name" required="true" valueBinding='lastName' name='last_name' viewName='lastNameField'}}
</div>
</div>
<div class="control-group">
<label class="control-label" for="email">Email</label>
<div class="controls">
{{ view Ember.TextField placeholder="Email" required="true" type="email" valueBinding='email' name='email' viewName='emailField'}}
</div>
</div>
<div class="control-group">
<label class="control-label" for="password">Password</label>
<div class="controls">
{{ view Ember.TextField placeholder="Password" required="true" type="password" valueBinding='password' name='password' viewName='passwordField'}}
</div>
</div>
<div class="control-group">
<label class="control-label" for="">Account Type</label>
<div class="controls">
{{#view Ember.RadioButtonGroup name="accountType" required="true" valueBinding="accountType"}}
<label class="radio">
{{view RadioButton checked='false' value="landlord"}}
Landlord
</label>
<label class="radio">
{{view RadioButton checked='false' required="true" value="tenant"}}
Tenant
</label>
{{/view}}
</div>
</div>
<div class="control-group">
<div class="controls">
<input class="btn btn-primary" {{action create model target='view' }} type="submit" value="Sign Up">
</div>
</div>
</form>
</div>
</div>
</div>
答案 0 :(得分:23)
我只是想知道在EmberJS中验证表格的一般模式是什么?
似乎有几种模式在使用中。它在很大程度上取决于要验证的内容,一般策略是尽可能使业务逻辑远离视图层。以下是一些可能有用的链接:
validations-in-emberjs-application.html建议在控制器级别执行验证,其中视图用于在焦点更改时触发验证。此截屏视频演示了如何使用此模式验证一些简单的表单字段。
Asynchronous-Form-Field-Validation-With-Ember提供了一些可重复使用的组件,可用于在视图层执行简单验证。
ember-validations是一个可用于向任何ember-object添加活动记录样式验证功能的库
对于我的App.IndexView我有一个表单,当你点击提交按钮时,目标设置为视图,所以我可以做一些验证。这很有效,直到我需要对有错误的字段做一些事情。我想在erro领域添加一个类,但不确定如何去做。
因为您希望立即验证多个字段,将此验证逻辑移动到控制器中会更有意义。无论哪种方式,通常您都会将给定字段的类属性绑定到属性,如下所示:
<div class="controls" {{bindAttr class=firstNameError:error:success}}>
{{ view Ember.TextField placeholder="First Name" required="true" valueBinding='firstName' name='first_name' viewName='firstNameField'}}
</div>
因此,在此处添加firstNameError
属性,该属性将根据验证结果返回true / false。鉴于您的实现,在_validate
运行时设置此属性可能是有意义的,但它也可以是实时执行验证的计算属性。
IndexView是否应该验证表单,还是应该为每个字段创建一个视图来验证模糊的自我?
这实际上取决于您希望用户体验如何。 FWIW我的投票是与模糊相关。