javascript - EmberJS - 如何在路线后滚动到导出?

标签 javascript ember.js

我的申请模板:

<div class ="row">
  <div class="hide-for-large-only small-12 text-center columns">
    <h1 class="subheader"> Departments </h1>
  </div>
  <div class="small-12 large-3 large-pull-1 columns">
    <ul class="no-bullet sid-nav">
      <li>{{#link-to "Departments.Foo"}}Foo{{/link-to}}</li>
      <li>{{#link-to "Departments.Bar"}}Bar{{/link-to}}</li>
      <li>{{#link-to "Departments.FooBar"}}FooBar{{/link-to}}</li>
      <li>{{#link-to "Departments.BarFoo"}}BarFoo{{/link-to}}</li>
    </ul>
  </div>

  <div class="small-12 large-9 columns ">
    {{outlet}}
  </div>
</div>

对于桌面版本,滚动到窗口顶部似乎没问题。

App.ApplicationController = Em.Controller.extend({
  currentPathChanged: (function() {
    return window.scrollTo(0, 0);
  }).observes("currentPath")
});

但在移动版本中,点击链接后,底部的内容更改不会被注意到,因为 {{outlet}} 位于侧面导航下方。那么如何在 Route 之后自动滚动到 {{outlet}} 呢?

最佳答案

您需要确保在新 View (在路由更改时)完全呈现之后发生 window.scrollTo 调用。 Ember.js 专门为此提供了一个队列:afterRender .

让我们定义一个可以在 View 中使用的 mixin,以便每当该 View 呈现时,它都会将窗口滚动到其模板的起始位置:

App.ScrollToMixin = Ember.Mixin.create({
  setupScrollToOutlet: function() {
    Ember.run.scheduleOnce('afterRender', this, function(){
      var position = this.$().offset().top;
      window.scrollTo(0, position);
    });
  }.on('didInsertElement')
});

假设您访问 posts 路线,并且导出位于页面的深处。将 App.ScrollToMixin 包含到 App.PostsView 中,它会将窗口滚动到 posts.handlebars 起始位置:

App.PostsView = Ember.View.extend(App.ScrollToMixin);

演示:http://emberjs.jsbin.com/miqakovu/4/edit

关于javascript - EmberJS - 如何在路线后滚动到导出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23030287/

相关文章:

javascript - var myVar = ""和有什么区别和 var myVar;?

javascript - 如何更改 Ionic 4 应用程序中的默认应用程序图标和启动画面?

ember.js - 在 Ember : Fixture vs REST adapter 中预加载数据

javascript - 找不到 "application"模板或 View 。什么都不会呈现 Ember Js Rails API

javascript - EmberJS - 如何全局设置所有组件的属性?

javascript - 停止来自 Ember 操作的点击传播?

ember.js - Ember JS : why are destroyed records committed back to the server?

javascript - 使用此方法访问变量会返回 undefined in map

javascript - 带 Owl Carousel 的全屏 slider

javascript - 带有新行和制表符的字符串以 HTML 形式显示