观察者如何在Ember.js中找出被观察属性的前后值?

Nar*_*esh 25 ember.js

请参阅ud3323提供的另一个问题的解决方案:http://jsfiddle.net/ud3323/ykL69/.此解决方案使用红色突出显示更改的值.我有一个额外的要求:如果该值增加了绿色突出显示,如果它的红色突出显示为红色.为此,我需要知道观察者中的旧值和新值.有没有办法做到这一点?

PS Embers文档没有说明观察者功能中可用的内容.我从示例中可以看出,由于观察者是在itemRowView中定义的,因此"this"指向itemRowView.

And*_*aus 16

beforeObserver已在Ember 1.10中弃用.

而是使用手动缓存:

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);
})
Run Code Online (Sandbox Code Playgroud)


Luk*_*lia 12

看看beforeObservers.一beforeObserver前一属性更改火灾.因此,如果您get是beforeObserver中的属性,则您将拥有更改前的值.您可以使用Ember.addBeforeObserver或通过observesBefore函数原型扩展来设置此类观察者.

这将为您提供实现目标所需的一切.我已经基于你的小提琴创建了以下JSBin来演示这个:http://emberjs.jsbin.com/qewudu/2/edit

更新于2014-10-07以反映Ember 1.7.x中的行为.

2015-02更新:beforeObserver已被弃用.请参阅此问题的其他答案.

  • 顺便说一句,我最近注意到函数上有一个`observesBefore`扩展,所以代码可以更好,如http://jsfiddle.net/ye3M2/ (11认同)
  • 我不相信提供'价值'.我正在测试1.5.1版 (3认同)