1

我在 ember 中有一个控制器脚本,并且 iam 在控制器中使用 init() 方法。这是我的脚本

export default Ember.Controller.extend({
.....,
init() {
    this._super(...arguments);
    this.set('idUser', this.commonService.getUser().id);
    Ember.$(document).ready(function () {
      let height = Ember.$(window).height() - 96;
      Ember.$(".feed-activity-list").slimScroll({
        height: height.toString() + "px"
      });
    });
  },
})

当用户第一次打开页面时调用 init 方法。但是当用户打开另一个页面并返回此页面时,控制器不会调用 init() 方法。当用户访问此页面时,如何强制控制器运行 init 方法。我避免使用组件,因为它很难重构:(

4

1 回答 1

4

控制器是单例的,所以只会init调用一次。您可以使用相应的路由activate挂钩或didTransition挂钩。但到那时 DOM 准备就绪,它并不能保证。您可能需要使用Ember.run.nextor Ember.run.later('afterRender', () => { })
使用component 那是 ember 的最佳实践。

于 2017-05-18T07:46:15.947 回答