Javascript 公共路由器事件

Javascript 公共路由器事件,javascript,ember.js,Javascript,Ember.js,我正在尝试将常见事件加入路由,然后根据需要扩展路由 像这样: App.ScrollTopRoute = Ember.Route.extend({ renderTemplate: function() { console.log('Hi this works ?'); window.scrollTo(0, 0); } }); 然后我延长路线: App.TodoRoute = App.ScrollTopRoute.extend({

我正在尝试将常见事件加入路由,然后根据需要扩展路由

像这样:

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相关的操作,这些操作应该进入
视图的
didInsertElement

因此,对于您的
窗口,滚动到(0,0)
才能工作,它应该在这样一个钩子中定义,假设您有一个
todos
模板,那么它应该工作

App.TodosView = Ember.View.extend({
  didInsertElement: function() {
    window.scrollTo(0, 0);
  }
});
在需要在不同类中执行公共代码的情况下,一种可能的方法是创建一个类并将其混合到需要它的类中

例如:

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
部分的演示,以及如何从扩展该
Mixin
的路径调用
Mixin
中定义的函数。看一看