[英]How can I detect a Router change in Meteor template to enable browser back behaviour?
我创建了具有可配置限制的分页。 我正在从IronRouter获取页码。 当我手动输入具有不同页码的url时,该代码有效。 但是,当我使用带有浏览器后退按钮的back时,它确实更改了URL,并且我可以看到beforeaction
和action
已记录到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.