在此之前,我必须澄清一下,在过渡到 Ember 2.3 的过渡期间,我正在使用 legacy-controller 和 legacy-view,可在此处找到:
https://github.com/emberjs/ember-legacy-controllers
现在,我的(旧版)控制器上有一个名为 currentTopPost 的属性。
在 Ember 1.7 中,我有这样的设置:
// before observer
currentTopPostBeforeObserver: function(){
...
}.observesBefore('currentTopPost'),
// observer
currentTopPostBeforeObserver: function(){
...
}.observes('currentTopPost'),
我这样做的原因是,当currentTopPost更改时,我希望它在将其值切换到新属性之前保存旧的topPost ,因为它是一个 Post 对象(我有一个 Post 模型)。
当然,在 1.7 中,我将旧帖子保存在 beforeObserver 中,然后在观察者中执行我必须做的任何其他事情。现在,在 Ember 2.3 中,我进行了以下设置:
currentTopPostObserver: Ember.observer('currentTopPost', function(){
...
}),
就执行具有新值的功能而言,它可以正常工作。但是我已经失去了在值改变之前处理动作的能力。现在根据对这个问题的回答:
observesBefore函数已被弃用,我们应该遵循以下原则:
doSomething: Ember.observer( 'foo', function() {
var foo = this.get('foo');
var oldFoo = this.get('_oldFoo');
if (foo === oldFoo) { return; }
// Do stuff here
this.set('_oldFoo', foo);
})
但是,在尝试使用 this.get("_oldCurrentTopPost") 时,我什么也没得到。如何在此属性更改之前访问它的旧值?