Router.go не работи

Имам приложение за метеор. Създадох оформлението и приложението с помощта на Material Design Lite от google. Следва моята навигация:

HTML за навигация

<template name="nav">
    <nav class="mdl-navigation mdl-layout--large-screen-only">
        <a class="mdl-navigation__link" href="/bg" id="home">Home</a>
        <a class="mdl-navigation__link" href="/bg" 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'

person Pravin    schedule 25.08.2015    source източник
comment
Защо просто не използвате href="{{pathFor 'home'}}", за да поставите истински връзки във вашата навигация, вместо да обработвате събития с щракване в js?   -  person Michel Floyd    schedule 25.08.2015
comment
Благодаря ти. това свърши работа.   -  person Pravin    schedule 26.08.2015
comment
Това има допълнителното предимство, че позволява връзките да бъдат spidered (ако приемем, че имате инсталиран spiderable). По-добре за SEO.   -  person Michel Floyd    schedule 26.08.2015
comment
@MichelFloyd, но си помислих, че сега googlebots обхождат и javascripts?   -  person Pravin    schedule 26.08.2015
comment
Трябва да инсталирате spiderable и phantomjs, за да работи на сайтовете на Meteor. Може да искате да прочетете спецификациите на Google, но не вярвайте че ще следва събитията с кликване до техния логичен завършек, това изисква много.   -  person Michel Floyd    schedule 26.08.2015


Отговори (1)


Използвате различни имена на шаблони, за да използвате събитията. Така че обвързвате събитията с щракване към шаблона adminNav, докато ги искате в шаблона nav.

Опитайте това вместо това

Template.nav.events

Редактирайте според вашите:

Router.go има по-нисък приоритет от празния href атрибут на връзката, така че той преминава към функцията на вашето събитие, но пропуска Router.go и вместо това ви насочва към href="/bg".

<a class="mdl-navigation__link" href="/bg" id="home">Home</a>

би трябвало

<a class="mdl-navigation__link" id="home">Home</a>

В противен случай трябва да стилизирате връзката.

Редактиране 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'

Това също върши работа.

person eTomate    schedule 25.08.2015
comment
съжалявам, това беше правописна грешка тук. - person Pravin; 25.08.2015
comment
Виждам, опитах се да го тествам на моята машина. Router.go не работи, когато етикетът a има зададен атрибут href. Празният href има по-висок приоритет от функцията Router.go, така че той ви пренасочва към текущо отворената страница. - person eTomate; 25.08.2015
comment
Ако има href, e.preventDefault() в началото трябва да свърши работата - person sdooo; 25.08.2015