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'

这也有效果。