我想在其中的值无效时自动突出显示Ember.TextField.
我现在在我的模板中有这样的东西但是很难看:
{{#if view.fieldInvalid}}
{{view Ember.TextField valueBinding="view.fieldValue" classNames="span1p5 highlight"}}
{{else}}
{{view Ember.TextField valueBinding="view.fieldValue" classnames="span1p5"}}
{{/if}}
Run Code Online (Sandbox Code Playgroud)
有没有办法在Ember.JS中使用内置视图(如Ember.TextField)执行此操作?
一种方法是使用computed属性添加classname绑定
//First extend Ember.TextField in your view
validatingTextField = Ember.TextField.extend({
//Now if isInvalid is true CSS class "highlight" is applied to text field
/* other ways include
isValid::error-class error-class will be applied when isValid is false
isValid:normal-class:error-class, normal-class is applied when isValid is true else error-class is applied
*/
classNameBindings: ['isInvalid:highlight',':span1p5'],
//If you have static classes you define them as :my-class-name
isInvalid: function(){
if(this.get('value').trim() === ""){
return true;
}else{
return false;
}
}.property('value')
})
Run Code Online (Sandbox Code Playgroud)
现在使用上面定义的把手
{{view view.validatingTextField valueBinding="view.fieldValue"}}
Run Code Online (Sandbox Code Playgroud)
重要 上面的代码可能满足您的需要,但如果有很多文本字段可能会降低您的应用程序速度,因为对值的每一次更改都会执行计算属性,最好有一个单击时可以应用的保存按钮操作文本字段的CSS类如下
validatingTextField = Ember.TextField.extend({
classNameBindings: ['isInvalid:highlight',':span1p5']
})
save: function(){
//your code for save
if(this.get('validatingTextField.value').trim()===""){
this.get('validatingTextField').set('isInvalid', true);
}
}
Run Code Online (Sandbox Code Playgroud)