繁体   English   中英

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

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

我创建了具有可配置限制的分页。 我正在从IronRouter获取页码。 当我手动输入具有不同页码的url时,该代码有效。 但是,当我使用带有浏览器后退按钮的back时,它确实更改了URL,并且我可以看到beforeactionaction已记录到console但不会触发模板更新/重新渲染。

铁路线定义如下:

@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

我在Route上使用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

尝试添加这样的行,例如dummy = Router.current()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM