Skip to content

Instantly share code, notes, and snippets.

@davidlormor
Last active February 15, 2016 23:42
Show Gist options
  • Save davidlormor/dc1f94eb55ee76ca8638 to your computer and use it in GitHub Desktop.
Save davidlormor/dc1f94eb55ee76ca8638 to your computer and use it in GitHub Desktop.
Countdown timer
import Ember from 'ember';
export default Ember.Controller.extend({
appName:'Ember Twiddle',
countdown: Ember.inject.service(),
actions: {
startTimer: function() {
this.get('countdown').start();
}
}
});
<h1>Welcome to {{appName}}, time left: {{countdown.timeLeft}}</h1>
<h1>Current time: {{countdown.currentTime}}</h1>
<h1>Last time: {{countdown.previousTime}}</h1>
<h1>Times: {{countdown.times}}</h1>
<br>
<button disabled={{countdown.running}} {{action 'startTimer'}}>Respawn</button>
<br>
{{outlet}}
<br>
<br>
import Ember from 'ember';
export default Ember.Service.extend({
times: [1],
currentTime: Ember.computed.alias('times.lastObject'),
previousTime: Ember.computed('times.length', function() {
var length = this.get('times.length');
return this.get('times').objectAt(length - 2) || 1;
}),
timeLeft: null,
running: Ember.computed.gt('timeLeft', 0),
run: function(){
var countdown = this;
if(this.get('running')) {
Ember.Logger.debug('Setting timer run');
Ember.run.later(countdown, function() {
this.decrementProperty('timeLeft');
this.run();
}, 1000);
}
},
start() {
var newTime = this.get('currentTime') + this.get('previousTime');
this.set('timeLeft', this.get('currentTime'));
this.get('times').pushObject(newTime);
this.run();
}
});
{
"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