2012-07-01 6 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') 
Смежные вопросы