Why Ember.js Rocks - Data Binding 2
HTML
<link rel="stylesheet" href="//cdn.jsdelivr.net/foundation/4.3.1/css/foundation.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0-rc.4/handlebars.min.js"></script>
<script src="http://builds.emberjs.com.s3.amazonaws.com/ember-1.0.0-rc.6.1.min.js"></script>
<script type="text/x-handlebars">
{{controllers.clock.seconds}}
{{controllers.monitor.allDone}}
</script>
CSS
body { margin: 3em; }
JavaScript
App = Ember.Application.create();
App.ApplicationController = Ember.ObjectController.extend({
needs: ['clock', 'monitor'],
isFinished: false,
isFinishedObserver: function() {
// this observer will fire every time, the isFinished property will only
// trigger an event to tell its observers it has changed one time
if(this.get('controllers.clock.seconds') > 10) {
this.set('isFinished', true);
}
}.observes('controllers.clock.seconds')
});
App.ClockController = Ember.Object.extend({
init: function() {
var self = this;
setInterval(function() {
self.set('seconds', self.get('seconds') + 1);
}, 200);
},
seconds: 0
});
App.MonitorController = Ember.ObjectController.extend({
needs: ['application'],
allDone: function() {
console.log('!! only fired once'); // well twice, because of the initial false value
return this.get('controllers.application.isFinished')
}.property('controllers.application.isFinished')
});