0
我只是在學習Ember的早期階段,並遇到了令人費解的事情。 我正試圖在兩個控制器之間進行通信,並更新其相應的視圖。Ember.js - 控制器和他們的意見之間的溝通
在一個簡化版本中,我想點擊一個按鈕來觸發一個控制器上的事件,該控制器在另一個控制器上啓動一個定時器。這有效,但計時器的視圖在值更改時未更新。
這是我有:
var App = Ember.Application.create();
App.Route = Ember.Route.extend({
events: {
startTimer: function(data) {
this.get('container').lookup('controller:Timer').start();
}
}
});
App.ApplicationController = Ember.Controller.extend({
actionWord: 'Start',
toggleTimer: function() {
var timer = this.get('container').lookup('controller:Timer');
if(timer.get('running')) {
timer.stop();
} else {
timer.start();
this.set('actionWord', 'Stop');
}
}
});
App.TimerController = Ember.Controller.extend({
time: 0,
running: false,
timer: null,
start: function() {
var self = this;
this.set('running', true);
this.timer = window.setInterval(function() {
self.set('time', self.get('time') + 1);
console.log(self.get('time'));
}, 1000);
},
stop: function() {
window.clearInterval(this.timer);
this.set('running', false);
this.set('time', 0);
}
});
和模板:
<script type="text/x-handlebars">
{{ render "timer" }}
<button {{action toggleTimer }} >{{ actionWord }} timer</button>
</script>
<script type="text/x-handlebars" data-template-name="timer">
{{ time }}
</script>
UPDATE:
忘了提,如果你打開控制檯,可以看到TimeController函數內部正在更新的時間,它只是沒有顯示在視圖中。
另外,直接在TimerController上調用start操作可以正確更新視圖。
謝謝!
那偉大工程,謝謝! 現在如果我想訪問另一條路線,該怎麼辦?有沒有像'this.routeFor('timer');'或'this.get('route.timer');'? 這是全部記錄在某處? – rainbowFish 2013-05-10 16:34:21
從另一條路線訪問路線在概念上並沒有多大意義,您想實現什麼目標? – 2013-05-10 19:36:23