Skip to content

Instantly share code, notes, and snippets.

@hjdivad
Last active August 29, 2015 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hjdivad/d7fa89814e1e5ab7f2db to your computer and use it in GitHub Desktop.
Save hjdivad/d7fa89814e1e5ab7f2db to your computer and use it in GitHub Desktop.
nested array depkey
import Ember from 'ember';
const computed = Ember.computed;
const Inner = Ember.Object.extend({
people: null,
});
const Person = Ember.Object.extend({
name: null,
});
export default Ember.Controller.extend({
appName:'Ember Twiddle',
actions: {
addSomeone() {
this.get('outer.firstObject.people').pushObject(Person.create({
name: 'Cersei',
}));
},
forceRecomputation() {
this.propertyWillChange('names');
this.propertyDidChange('names');
}
},
outer: [Inner.create({ people: [Person.create({ name: 'Tywin' })]})],
names: computed('outer.@each.people.[]', function() {
return this.get('outer').reduce((acc, inner) => {
return acc.concat(inner.get('people').mapBy('name'));
}, []);
})
});
This list doesn't update when we hit <em>add someone</em>. We know the CP works by hitting <em>force computation</em>.
<br>
<br>
<ul>
{{#each names as |name|}}
<li>{{name}}</li>
{{/each}}
</ul>
<hr />
<button {{action 'addSomeone'}}>add someone</button><br />
<button {{action 'forceRecomputation'}}>force recomputation</button><br />
<br>
<br>
See <a href="https://github.com/emberjs/ember.js/issues/5043">emberjs/ember.js#5043</a>
{
"version": "0.4.8",
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/1.13.8/ember.js",
"ember-data": "https://cdnjs.cloudflare.com/ajax/libs/ember-data.js/1.13.9/ember-data.js",
"ember-template-compiler": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/1.13.8/ember-template-compiler.js"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment