如何检测 Meteor 模板中的路由器更改以启用浏览器后退行为?

How can I detect a Router change in Meteor template to enable browser back behaviour?

我创建了一个可配置限制的分页。我从 IronRouter 获取页码。当我使用不同的页码手动输入 url 时,该代码有效。但是,当我使用带有浏览器后退按钮的返回时,它确实更改了 url,我可以看到 beforeactionaction 被记录到 console 但它不会触发模板 update/re-render.

铁线定义如下:

@route "/posts/page/:pageNum",
    name: "posts.page"
    template: "posts"
    layoutTemplate: "default_layout"
    onBeforeAction: () ->
      console.log 'beforeaction', @params.pageNum, @
      @next()
    action: () ->
      console.log 'inside action', @, @state.get 'pageNum'
      @render()

模板 onCreated 代码:

Template.posts.onCreated ->
  limit = 10
  currPage = Router.current().state.get('pageNum') || 1

  self = @
  @itemsPerPage = new ReactiveVar limit
  @currPage = new ReactiveVar parseInt currPage, 10

  @autorun ->
    handle = self.subscribe "posts",
      limit: self.itemsPerPage.get()
      ,page: self.currPage.get()
    yes

更新帖子但在使用浏览器后退按钮时不更新的导航代码:

'click .pager-page': (e,t) ->
  e.preventDefault()
  gotoPage = parseInt e.currentTarget.dataset.pagerPage, 10
  t.currPage.set gotoPage
  Router.go 'posts.page', pageNum: gotoPage

尝试像这样添加一行 dummy = Router.current()

在自动运行中,以便在 URL 更改时触发它。

我在路线

上使用state反应变量解决了这个问题

更新路线如下

onBeforeAction: () ->
  @state.set 'pageNum', @params.pageNum
  @next()
  yes

并在模板的 autorun

中获取它
@autorun ->
  handle = self.subscribe "posts",
    limit: self.itemsPerPage.get()
    ,page: +Router.current().state.get('pageNum')
  yes