Emberjs常见路由器事件

Emberjs common router events

本文关键字:事件 路由器 常见 Emberjs      更新时间:2023-09-26

我正在尝试将常见事件连接到一个路由,然后根据需要扩展该路由

像这样:

App.ScrollTopRoute = Ember.Route.extend({
   
   renderTemplate: function() {
           console.log('Hi this works ?');
        window.scrollTo(0, 0);
    }
});

然后我延长路线:

App.TodoRoute = App.ScrollTopRoute.extend({   
  model: function(params) {
    return App.Todo.find(params.todo_id);
  }
});

问题是ScrollTopRoute内的事件没有启动

那么,哪种方法是连接路由的常用例程的最佳方法呢?

您正在执行与DOM相关的操作,这些操作应该进入viewdidInsertElement

因此,为了使window.scrollTo(0, 0)工作,它应该在这样一个钩子中定义,假设您有一个todos模板,那么它应该工作。

App.TodosView = Ember.View.extend({
  didInsertElement: function() {
    window.scrollTo(0, 0);
  }
});

如果您需要在不同的类中执行公共代码,一种可能的方法是创建一个Mixin并将其混合到需要它的类中

例如:

App.CommonMixin = Ember.Mixin.create({
  myCommonFunction: function() {
    console.log('this works');
  }
});
App.ScrollTopRoute = Ember.Route.extend(App.CommonMixin, {
  ...
  // myCommonFunction is available here
});
App.AnotheScrollTopRoute = Ember.Route.extend(App.CommonMixin, {
  ...
  // myCommonFunction is available here
});

至于Mixin,请参阅这里的简单演示。

希望这能回答你的问题,如果不告诉我,我可以进一步改进。