将类绑定到TextField

时间:2012-11-20 04:12:04

标签: ember.js

我想在其中的值无效时自动突出显示Ember.TextField。

我现在在我的模板中有类似的东西但是很难看:

{{#if view.fieldInvalid}}
    {{view Ember.TextField valueBinding="view.fieldValue" classNames="span1p5 highlight"}}
{{else}}
    {{view Ember.TextField valueBinding="view.fieldValue" classnames="span1p5"}}
{{/if}}

有没有办法在Ember.JS中使用内置视图(如Ember.TextField)执行此操作?

1 个答案:

答案 0 :(得分:5)

这样做的一种方法是添加带有计算属性的类名绑定

//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')
})

现在使用上面定义的把手

{{view view.validatingTextField valueBinding="view.fieldValue"}}

重要的 上面的代码可能满足您的需要,但如果有很多文本字段可能会降低您的应用程序速度,因为计算属性是为值中的每一次更改执行的,最好有一个保存按钮操作,点击后可以应用文本字段的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);
  }
}