2012-10-08 73 views
1

我正在开发一个Derby应用程序,似乎无法弄清楚如何在页面上取消订阅。我知道如何取消订阅,但挂钩页面似乎是问题所在。取消订阅更换页面

我现有的代码看起来非常相似:

get "/somePath", (page, model) -> 
    someQueryHere = model.query("somecollection").someMotif() 

    model.subscribe someQueryHere, (err, results) -> 
     if err? 
      ... 
      return 

     ... 

    do page.render 
+0

尝试将此内容发布到Google群组。有人可能知道答案https://groups.google.com/forum/?fromgroups=#!forum/derbyjs – switz

+0

@Switz我会尝试。 – NightExcessive

回答

1

你是什么“的页面休假”究竟是指通过?当完整页面重新加载发生时,取消订阅是不必要的,socket.io连接将被终止。

,如果您想从客户端页面上的模型退订渲染另一方面,你可以尝试使用render事件之一:

app.on 'pre:render', -> 
    model.unsubscribe someQueryHere 

注意,这使事件发生的路线后就一直所以你应该注意不要从你订阅的查询/路径中取消订阅。

无论如何,更完整的例子将有助于更好地理解你的问题。

关于您的示例的另一个说明:page.render()应该可能在subscribe回调内调用。另外,为什么您使用do page.render而不是简单地这样调用它:page.render()

+0

对于做page.render:更多的偏好,是否有任何功能差异?此外,这主要是为了避免有一堆没有被使用的订阅(对于浏览时没有实际重新加载的客户端)。有没有什么办法在每个页面的基础上做到这一点,以避免从我刚刚订阅的查询中取消订阅至? – NightExcessive

+0

'do page.render'没有任何功能上的差异,尽管你无法指定参数。我以前没有见过这种用法。我不知道有什么方法可以在另一个地方做你想做的事。如果您探索德比的来源,您可能会发现一些您可以使用的未公开事件。最好的就在路由处理开始之前。虽然第二个想法是,你可以尝试在应用程序路由之前退出中间件中的所有内容,但我认为这不是一个好主意。 – lackac