2014-01-02 3 views
2

Я хотел бы иметь подкласс 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

Что я в конечном итоге делает была привязка 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'), 
Смежные вопросы