Skip to content

Instantly share code, notes, and snippets.

@GavinJoyce
Last active February 2, 2017 12:20
Show Gist options
  • Select an option

  • Save GavinJoyce/d97a0cdb0fa19d44df441af2422bd59a to your computer and use it in GitHub Desktop.

Select an option

Save GavinJoyce/d97a0cdb0fa19d44df441af2422bd59a to your computer and use it in GitHub Desktop.
Classic Actions vs Closure Actions
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
classicToggle() {
this.log('outer classic toggle');
this.sendAction('classicToggle');
}
},
attributeBindings: 'style:style',
style: 'background-color: lightgreen; color: purple;',
log(message) {
console.log(`%c ${message}`, 'background: lightgreen; color: purple');
},
});
import Ember from 'ember';
export default Ember.Component.extend({
toggle: () => { return 'default from inner component'; },
actions: {
classicToggle() {
this.log('inner classic toggle');
this.sendAction('classicToggle');
},
closureToggle() {
this.log('inner closure toggle');
let returnValue = this.get('toggle')();
console.log('return value', returnValue);
}
},
attributeBindings: 'style:style',
style: 'background-color: yellow; color: blue;',
log(message) {
console.log(`%c ${message}`, 'background: yellow; color: blue');
}
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
actions: {
classicToggle() {
this.log('application classic toggle', this);
},
toggle() {
this.log('application closure toggle', this);
return 142857;
}
},
log(message) {
console.log(`%c ${message}`, 'background: cornflowerblue; color: white');
},
});
body {
margin: 12px 16px;
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 12pt;
}
.ember-view {
border: 1px solid green;
padding: 10px;
margin-top: 10px;
margin-bottom: 10px;
}
<div style="background-color: cornflowerblue; color: white; padding: 10px">
<h2>Classic vs Closure Actions</h2>
{{my-component
classicToggle='classicToggle'
toggle=(action 'toggle')
}}
</div>
<h3>Outer component</h3>
<button {{action 'classicToggle'}}>Classic Toggle</button>
<button onclick={{action toggle}}>Closure Toggle</button>
{{my-inner-component
classicToggle='classicToggle'
toggle=toggle
}}
<h3>Inner component</h3>
<button {{action 'classicToggle'}}>Classic Toggle</button>
<button onclick={{action 'closureToggle'}}>Closure Toggle</button>
{
"version": "0.11.0",
"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.10.2",
"ember-data": "2.11.0",
"ember-template-compiler": "2.10.2",
"ember-testing": "2.10.2"
},
"addons": {}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment