如何检测 Meteor 模板中的路由器更改以启用浏览器后退行为?
How can I detect a Router change in Meteor template to enable browser back behaviour?
我创建了一个可配置限制的分页。我从 IronRouter 获取页码。当我使用不同的页码手动输入 url 时,该代码有效。但是,当我使用带有浏览器后退按钮的返回时,它确实更改了 url,我可以看到 beforeaction
和 action
被记录到 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
我创建了一个可配置限制的分页。我从 IronRouter 获取页码。当我使用不同的页码手动输入 url 时,该代码有效。但是,当我使用带有浏览器后退按钮的返回时,它确实更改了 url,我可以看到 beforeaction
和 action
被记录到 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