Router.go 不工作
Router.go is not working
我有一个流星应用程序。我使用 google 的 Material Design Lite 构建了布局和应用程序。以下是我的导航:
导航html
<template name="nav">
<nav class="mdl-navigation mdl-layout--large-screen-only">
<a class="mdl-navigation__link" href="" id="home">Home</a>
<a class="mdl-navigation__link" href="" id="my-pictures">My Pictures</a>
</nav>
</template>
路由器文件
passIfLoggedIn = ->
if not Meteor.user()
@render 'login'
else
@next()
Router.route '/home',
waitOn: -> Meteor.subscribe 'StaticTexts'
action: ->
@layout 'layout'
@render 'openPictures', to: 'content'
@render 'cover', to: 'cover'
onBeforeAction: passIfLoggedIn
Router.route '/myPictures',
waitOn: -> Meteor.subscribe 'StaticTexts'
action: ->
@layout 'layout'
@render 'myPictures', to: 'content'
onBeforeAction: passIfLoggedIn
处理程序
Template.adminNav.events
'click #home': (e) ->
console.log "home"
Router.go '/home'
'click #my-pictures': (e) ->
console.log "my pictures"
Router.go '/myPictures'
这里的问题是当我导航到浏览器 url 的个别路线时,它按预期呈现。但是当我在导航面板上单击另一个按钮时,例如:My Pictures
,地址栏中的 url 会瞬间改变并恢复到当前路线。页面保持不变。它不会导航到其他页面。有人可以帮我解决这个问题吗?
编辑问题中的 1 个错字。
处理程序
Template.nav.events
'click #home': (e) ->
console.log "home"
Router.go '/home'
'click #my-pictures': (e) ->
console.log "my pictures"
Router.go '/myPictures'
您使用不同的模板名称来使用事件。
因此,您将点击事件绑定到 adminNav 模板,而您希望它们在 nav 模板中。
试试这个
Template.nav.events
编辑你的:
Router.go的优先级比link的空href属性低,所以他跳转到你事件的函数,但是跳过Router.go,把你路由到href="" 代替。
<a class="mdl-navigation__link" href="" id="home">Home</a>
应该是
<a class="mdl-navigation__link" id="home">Home</a>
您需要为 link 设置样式,否则。
编辑 2:
Sindis 说得对,您可以在点击事件中使用 e.preventDefault()。
Template.adminNav.events
'click #home': (e) ->
e.preventDefault
console.log "home"
Router.go '/home'
'click #my-pictures': (e) ->
e.preventDefault
console.log "my pictures"
Router.go '/myPictures'
这也有效果。
我有一个流星应用程序。我使用 google 的 Material Design Lite 构建了布局和应用程序。以下是我的导航:
导航html
<template name="nav">
<nav class="mdl-navigation mdl-layout--large-screen-only">
<a class="mdl-navigation__link" href="" id="home">Home</a>
<a class="mdl-navigation__link" href="" id="my-pictures">My Pictures</a>
</nav>
</template>
路由器文件
passIfLoggedIn = ->
if not Meteor.user()
@render 'login'
else
@next()
Router.route '/home',
waitOn: -> Meteor.subscribe 'StaticTexts'
action: ->
@layout 'layout'
@render 'openPictures', to: 'content'
@render 'cover', to: 'cover'
onBeforeAction: passIfLoggedIn
Router.route '/myPictures',
waitOn: -> Meteor.subscribe 'StaticTexts'
action: ->
@layout 'layout'
@render 'myPictures', to: 'content'
onBeforeAction: passIfLoggedIn
处理程序
Template.adminNav.events
'click #home': (e) ->
console.log "home"
Router.go '/home'
'click #my-pictures': (e) ->
console.log "my pictures"
Router.go '/myPictures'
这里的问题是当我导航到浏览器 url 的个别路线时,它按预期呈现。但是当我在导航面板上单击另一个按钮时,例如:My Pictures
,地址栏中的 url 会瞬间改变并恢复到当前路线。页面保持不变。它不会导航到其他页面。有人可以帮我解决这个问题吗?
编辑问题中的 1 个错字。
处理程序
Template.nav.events
'click #home': (e) ->
console.log "home"
Router.go '/home'
'click #my-pictures': (e) ->
console.log "my pictures"
Router.go '/myPictures'
您使用不同的模板名称来使用事件。 因此,您将点击事件绑定到 adminNav 模板,而您希望它们在 nav 模板中。
试试这个
Template.nav.events
编辑你的:
Router.go的优先级比link的空href属性低,所以他跳转到你事件的函数,但是跳过Router.go,把你路由到href="" 代替。
<a class="mdl-navigation__link" href="" id="home">Home</a>
应该是
<a class="mdl-navigation__link" id="home">Home</a>
您需要为 link 设置样式,否则。
编辑 2:
Sindis 说得对,您可以在点击事件中使用 e.preventDefault()。
Template.adminNav.events
'click #home': (e) ->
e.preventDefault
console.log "home"
Router.go '/home'
'click #my-pictures': (e) ->
e.preventDefault
console.log "my pictures"
Router.go '/myPictures'
这也有效果。