2

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

像这样:

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 内部的事件没有启动

那么加入路由的常用例程的最佳方式是什么?

4

1 回答 1

3

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

因此,为了让您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,请看这里的简单演示

希望这能回答您的问题,如果不让我知道,以便我可以进一步改进。

于 2013-07-16T17:29:13.147 回答