Skip to content

Instantly share code, notes, and snippets.

@Panman82
Last active February 17, 2016 16:11
Show Gist options
  • Save Panman82/d0bb2783f6d9806f2078 to your computer and use it in GitHub Desktop.
Save Panman82/d0bb2783f6d9806f2078 to your computer and use it in GitHub Desktop.
.set()ing on init() hook overrides attrs
import Ember from 'ember';
export default Ember.Controller.extend({
appName:'Ember Twiddle'
});
<h1>Welcome to {{appName}}</h1>
<p>
Setting instance level property "defaults" on the
<code>init()</code> hook overrides the incoming
attribute value.
</p>
<h3><code>&#123;&#123;my-foobar&#125;&#125;</code></h3>
{{my-foobar}}
<h3><code>&#123;&#123;my-foobar someAttr="baz" workingAttr="baz"&#125;&#125;</code></h3>
{{my-foobar someAttr="baz" workingAttr="baz"}}
import Ember from 'ember';
export default Ember.Component.extend({
tagName: 'p',
init() {
this._super(...arguments);
this.set('someAttr', 'default');
// solution by rwjblue
if ( !('workingAttr' in this) ) {
this.set('workingAttr', 'default');
}
// or (but this won't work for falsy values)
// this.workingAttr = this.workingAttr || 'default';
// ^ which is more performant but like
// this.set(
// 'workingAttr',
// this.getWithDefault('workingAttr', 'default')
// );
}
});
<strong>someAttr:</strong>
{{someAttr}}
<br />
<strong>workingAttr:</strong>
{{workingAttr}}
{
"version": "0.5.3",
"EmberENV": {
"FEATURES": {}
},
"options": {
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/2.3.1/ember.debug.js",
"ember-data": "https://cdnjs.cloudflare.com/ajax/libs/ember-data.js/2.3.3/ember-data.js",
"ember-template-compiler": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/2.2.0/ember-template-compiler.js"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment