chacham15
chacham15

Reputation: 14251

Why doesnt an ember observer fire on arrays?

I am trying to listen to specific property on every element in an array and get a result from that. However, updates dont appear to happen properly.

var emptyEmberObjectClass = Ember.Object.extend({});
var container = Ember.Object.extend({
  data: Ember.A([
    emptyEmberObjectClass.create({yo:1}),
    emptyEmberObjectClass.create({yo:2}),
    emptyEmberObjectClass.create({yo:3})
  ]),
  computedData: Ember.computed('[email protected]', function(){
    var sum = 0;
    this.get('data').forEach(function(data){
      sum = sum + data.yo;
    });
    return sum;
  }),
  test: Ember.observer('computedData', function(){
    Ember.$('#a').html('woohoO!');
  })
}).create();
var existingItem = container.get('data');
existingItem.objectAt(0).set('yo', 50);

http://jsfiddle.net/stb0nr2y/1/

As you can see, the text field still says 'start' and doesnt get updated to 'woohoO!'.

Any help will be greatly appreciated.

Upvotes: 0

Views: 39

Answers (1)

Daniel
Daniel

Reputation: 18680

JavaScript:

var emptyEmberObjectClass = Ember.Object.extend({});
var container = Ember.Object.extend({
  data: Ember.A([
    emptyEmberObjectClass.create({yo:1}),
    emptyEmberObjectClass.create({yo:2}),
    emptyEmberObjectClass.create({yo:3})
  ]),
  computedData: Ember.computed('[email protected]', function(){
    var sum = 0;
    this.get('data').forEach(function(data){
      sum += data.get('yo');
    });
    return sum;
  }),
  testObs: Ember.on('init', Ember.observer('computedData', function() {
    Ember.$('#a').html('woohoO! cd: `' + this.get('computedData') + '`');
  }))
}).create();

var existingItem = container.get('data');
var target = existingItem.objectAt(0);
target.set('yo', 50);

target.set('yo', 100);

Updates DOM correctly with:

woohoO! cd: 55

and then:

woohoO! cd: 105

Please note that I'm using Ember v1.13.10:

<script src="http://builds.emberjs.com/tags/v1.13.10/ember.min.js"></script>

Working demo.

Upvotes: 1

Related Questions