Ember.js 将类绑定到TextField

Ember.js 将类绑定到TextField,ember.js,Ember.js,我想在Ember.TextField中的值无效时自动突出显示该字段 我现在的模板中有这样的东西,可以工作,但很难看: {{#if view.fieldInvalid}} {{view Ember.TextField valueBinding="view.fieldValue" classNames="span1p5 highlight"}} {{else}} {{view Ember.TextField valueBinding="view.fieldValue" classna

我想在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这样的内置视图来实现这一点?

一种方法是使用computed属性添加类名绑定

//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"}}
重要的 上面的代码可能满足您的需要,但如果有许多文本字段,则可能会降低应用程序的速度,因为计算属性会针对值中的每一个更改执行,因此最好有一个save button操作,单击该操作可以将CSS类应用于textfield,如下所示

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);
  }
}

实现这一点的一种方法是使用computed属性添加类名绑定

//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"}}
重要的 上面的代码可能满足您的需要,但如果有许多文本字段,则可能会降低应用程序的速度,因为计算属性会针对值中的每一个更改执行,因此最好有一个save button操作,单击该操作可以将CSS类应用于textfield,如下所示

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);
  }
}