如何将转换函数绑定到属性?

时间:2014-01-02 23:04:17

标签: ember.js

我想有一个TextField的子类,它将变换应用于value,但我希望特定的变换是动态的。

我天真地这样做了:

{{transforming-input transformer=myTransformer ...}}

TransformingInputComponent = Ember.TextField.extend({
  transformedValue: function() {
    var transformer = this.get('transformer');
    return transformer.apply(this, [this.get('value')]);
  }.property('value'),
})

Controller = Ember.ObjectController.extend({
  myTransformer: Ember.String.camelize
})

但它不起作用;将函数绑定到属性时,另一方面未定义。 (我通过将绑定更改为字符串来验证它不是拼写错误或其他错误)

1 个答案:

答案 0 :(得分:1)

我最终做的是将一个dotpath绑定到变换器,并查找转换函数:

{{transforming-input type='text' transformer="Ember.String.handleize" ... }}


transformFunction: function() {
  var path = this.get('transformer').split('.');
  var scope = window;
  if (Ember.isNone(window[path[0]])) {
    scope = this.get('_parentView.controller');
  }
  for(var i=0;i < path.length; i++){
    scope = scope[path[i]];
    if (Ember.isNone(scope)) {
      break;
    }
  }
  return scope;
}.property('transformer'),

transformedValue: function() {
  var transformer = this.get('transformFunction');
  if(Ember.isEmpty(transformer)){
    transformer = this.get('noop')
  }
  return transformer.apply(this.get('_parentView.controller'), [this.get('value')]);
}.property('value'),