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