Javascript 从另一个视图转到锚定

Javascript 从另一个视图转到锚定,javascript,jquery,ember.js,ember-cli,Javascript,Jquery,Ember.js,Ember Cli,目前我正在使用该项目构建我的ember应用程序,但在配置导航时遇到了问题。下面的代码块在索引路由器上工作,但是,我在其他路由器上遇到了一个问题。goToAnchor部分允许我导航到单个无限滚动状主页上的页面内锚定标记,但当我转到其他视图(即我的/术语页面)时,我需要菜单能够单击返回主页,理想情况下无需刷新浏览器 在没有刷新的情况下可以这样做吗 索引路由器: export default Ember.Route.extend({ actions: { goToAnchor:

目前我正在使用该项目构建我的ember应用程序,但在配置导航时遇到了问题。下面的代码块在索引路由器上工作,但是,我在其他路由器上遇到了一个问题。goToAnchor部分允许我导航到单个无限滚动状主页上的页面内锚定标记,但当我转到其他视图(即我的/术语页面)时,我需要菜单能够单击返回主页,理想情况下无需刷新浏览器

在没有刷新的情况下可以这样做吗

索引路由器:

export default Ember.Route.extend({
    actions: {
        goToAnchor: function(item,anchor) {
            var $elem, $scrollTo;
            $elem = $('#' + anchor);
            $scrollTo = $('body').animate({
                scrollTop: $elem.offset().top-15
            }, parseInt(ENV.CONFIG.PRODUCT.SCROLL_SPEED));
            this.transitionTo(item.route).then($scrollTo);
        }
    }
});
导航:

<section class="top-bar-section center">
    <ul class="nav-header">
        <li><a {{action goToAnchor 'index' 'menu1'}}>menu1</a></li>
        <li><a {{action goToAnchor 'index' 'menu2'}}>menu2</a></li>
        <li><a {{action goToAnchor 'index' 'menu3'}}>menu3</a></li>
        <li><a {{action goToAnchor 'index' 'menu4'}}>menu4</a></li>
    </ul>
</section>

嗨,克里斯,我刚刚查看了你的代码,找到了gotchas

  • 您的术语页面的路径是
    legal/tou
    。当您从术语页面单击导航菜单时,您的操作将通过
    legal/tou=>application
    routes(child=>parent hierarchy)冒泡显示。因此,在操作goToAnchor中未处理的
    被抛出。因此,第一步是将
    goToAnchor
    逻辑从
    index
    路由向上移动到
    application
    路由

  • 其次,在
    goToAnchor
    操作中,您试图在呈现模板之前查询DOM。因此,它爆炸了。呈现模板后,需要查询DOM。您应该使用余烬运行循环的
    afterRender
    队列。要了解有关Ember运行循环的更多信息,请参阅


  • 我不明白你的问题。一个简单的JSFIDLE可能会有帮助,这很难描述,但我有一个索引视图,goToAnchors在其中工作,但是,在其他视图上,我如何使菜单链接回到索引视图?因此,单击一个链接转到一个视图,但是,新菜单是如何工作的,以便它可以使用锚点单击返回主页的?当您想要从把手模板过渡到任何路线时,您应该使用
    链接到
    助手。也可以看看这篇文章,以保持滚动的位置
    
    DEBUG: ------------------------------- 
    DEBUG: Ember      : 1.5.1 
    DEBUG: Ember Data : 1.0.0-beta.7+canary.b45e23ba 
    DEBUG: Handlebars : 1.3.0 
    DEBUG: jQuery     : 2.1.1 
    DEBUG: ------------------------------- 
    
    //routes/application.js
    
    export default Ember.Route.extend({
    actions: {
     goToAnchor: function(route,anchor) {
        var $elem, $scrollTo;
        this.transitionTo(route).then(function() {
          Em.run.schedule('afterRender', function(){
            $elem = $('#' + anchor);
            $('html,body').animate({
                scrollTop: $elem.offset().top-15
            }, 500);              
          });
        });
      }
     }
    });