2012-07-01 49 views
1

Ember.Binding.transform已被删除或替换为最新的ember。我有很多的绑定是采取这种形式:Ember.Binding.transform迁移到最新代码

valueBinding: Ember.Binding.transform({ 
    to: function(value, binding) { 
    //return something 
    }, 
    from: function(value, binding) { 
    //return something 
    } 
}).from('parentView.content.finishBy'), 

谁能告诉我,我应该如何更新我的代码到新的制度?

回答

1

您可以将计算出的属性定义添加到Ember.computed,看到 http://jsbin.com/awufuv/edit#source

Ember.computed.finishBy = function() { 
    return Ember.computed('parentView.content.finishBy', function(key) { 
    var finishBy = Ember.getPath(this, 'parentView.content.finishBy'); 
    return finishBy === 'now'; 
    }).cacheable(); 
}; 

你可以然后像这样使用它:

App.obj = Ember.Object.create({ 
    parentView: { 
    content: { 
     finishBy: 'now' 
    } 
    }, 
    finishProp: Ember.computed.finishBy() 
}); 

查看更多例子https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/lib/computed.js#L417-434


只是要清楚:你不会被强迫自定义计算的属性添加到Ember.computed。基本上可以在代码中的任何位置声明函数。现在我想到了,您可能需要将您的帮助程序添加到您的应用程序名称空间,而不是将其添加/拒绝到Ember。但这只是个人喜好的问题。

+0

Ember.DateTime具有以下参照变换: Ember.Binding.dateTime =函数(格式){ 返回this.transform(函数(价值,结合){ 返回值value.toFormattedString(格式): null; }); }; 你认为这应该是一个计算属性吗? – dagda1

0

关于如何更新您的代码,关于original commit有一个很好的讨论。

然而,在你的情况,我想你可以只使用一个计算的属性:

value: function(key, value){ 
    if(arguments.length===1){ 
    //return something 
    } else{ 
    //set and return something 
    } 
}).property('parentView.content.finishBy')