Skip to content

Instantly share code, notes, and snippets.

@iezer
Last active January 12, 2018 15:45
Show Gist options
  • Save iezer/539b3bece24a827559a6e7c406c15145 to your computer and use it in GitHub Desktop.
Save iezer/539b3bece24a827559a6e7c406c15145 to your computer and use it in GitHub Desktop.
Share Object Prototypes
import Ember from 'ember';
export default Ember.Component.extend({
myArray: Ember.computed(function() {
return [];
}),
init() {
this._super(...arguments);
this.get('myArray').push('hello')
}
});
import Ember from 'ember';
export default Ember.Component.extend({
myArray: [],
init() {
this._super(...arguments);
this.get('myArray').push('hello')
}
});
import Ember from 'ember';
export default Ember.Component.extend({
myArray: null,
init() {
this._super(...arguments);
this.set('myArray', []);
this.get('myArray').push('hello');
}
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle'
});
<p>
BAD (all 3 component invocations share same array):
{{bad-component}}
{{bad-component}}
{{bad-component}}
</p>
<p>
GOOD (arrays are initialized at construction):
{{good-component}}
{{good-component}}
{{good-component}}
</p>
<p>
Also (arrays are lazily created using computed properties):
{{also-good}}
{{also-good}}
{{also-good}}
</p>
{{#each myArray as |str|}}
{{str}}
{{/each}}
{{#each myArray as |str|}}
{{str}}
{{/each}}
{{#each myArray as |str|}}
{{str}}
{{/each}}
{
"version": "0.12.1",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "2.16.2",
"ember-template-compiler": "2.16.2",
"ember-testing": "2.16.2"
},
"addons": {
"ember-data": "2.12.1"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment