为什么Meteor路由器函数总是运行两次?

5
我正在使用meteorite的Router包。
Meteor.Router.add
  "/article/:id": ->
    log "article"
    "article"

每当文章页面或模板被加载时,路由器中的回调函数总是运行两次。我试图使用这个回调函数来增加文章的浏览次数。但是这会造成一个问题(每次增加操作都会进行两次)。
这是意料之中的行为吗?还是我做错了什么?
更新: 实际上并不总是运行两次。它在页面刷新或浏览器首次导航到页面时发生。无论如何,这仍然是一个问题。

据我所知,这不是预期的行为。您如何加载每篇文章的网址?是通过Meteor.Router.to还是URL? - Tarang
我的意思是,当您在浏览器中加载“/article/1”时,您是使用<a href='/article/1'>加载页面还是Meteor.Router.to('/article/1') - Tarang
是的,<a href='/article/1'>我刚发现page.js上下文对象在这两个调用中略有不同。第一个调用将init设置为true,而第二个调用则未定义它。 - Dave
另外,它并不总是被运行两次。它只会在页面刷新或者浏览器第一次导航到该页面时发生。无论如何,它仍然存在问题。 - Dave
1
我已经使用路由器创建了一个空项目,并在 https://gist.github.com/Tarangp/5085008 上进行了刷新或首次加载的尝试,但我无法复制这个问题。 - Tarang
显示剩余2条评论
1个回答

2

更新:

罪魁祸首是我用于 IE 8+ 路由支持的 HTML5-History-API 包。下面的解决方案将有助于遇到相同设置和问题的人。


找到了一个解决方案,但我不确定这是否是处理此问题的预期方式。

"/article/:id": (id) ->
   unless this.init
     Session.set "articleId", id
     Meteor.call "incArticleViews", id
   "article"

如果有更好的解决方案,请发帖并我会接受。

这在火狐浏览器中并不总是有效,但它可以防止在谷歌浏览器中出现双重点击。 - cazgp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接