2014-09-19 39 views
1

我有一個鐵路由器呈現的遊戲模板(當你從默認頁面進入遊戲)。 當遊戲結束時,我希望播放器被路由到默認頁面,當前遊戲模板實例將被移除。如何銷燬模板實例?

爲此目的,我在遊戲收集中使用移除的事件掛鉤。它允許被自動重定向其他玩家的默認頁面時,遊戲結束:

Tempalte.game.rendered = function() { 
    var self = this; 
    var gameId; 
    //some code here 
    var game = Games.find({name: Session.get('gameName')});  
    game.observeChanges({ 
     added: function(id, fields) { 
      gameId = id; 
     }, 
     removed: function(id) { 
      if (gameId === id) { Router.go('/'); 
       alert("Game finished");} 
     } 
    }); 
} 

當我完成比賽,並創造新的具有相同名稱。警報被調用兩次。 一個完成/創建=>三個警報。 看起來遊戲模板實例仍然保留在後臺某處,並監視Games集合中的更改。

所以問題是如何在進入默認頁面時正確刪除模板實例? 試過Blaze.remove(self)不工作,因爲遊戲模板沒有用Blaze.render()渲染。 在路由器中,我不知道如何獲取模板實例的句柄。

回答

2

這不是模板實例仍然在那裏導致警報堆積起來,它的光標永遠不會停止。

當您在rendered回調中聲明光標以在模板實例爲destroyed時停止觀察時,您需要保存對其的引用。

Template.game.rendered=function(){ 
    // ... 
    this.observeCursor=game.observeChanges(...); 
}; 

Template.game.destroyed=function(){ 
    this.observeCursor.stop(); 
}; 
+0

謝謝!這有幫助! – 2014-09-20 17:20:00