2014-09-19 41 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