我想有一个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
})
但它不起作用;将函数绑定到属性时,另一方面未定义。 (我通过将绑定更改为字符串来验证它不是拼写错误或其他错误)
答案 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'),