javascript - Ember 过渡和渲染完成事件

标签 javascript ember.js promise transition

是否触发了任何事件,表明转换/渲染已完成(并且 dom 可见/就绪)。

setupcontroller/activate 是在 dom 构建/渲染之前

didInsertElement 仅在我第一次插入元素并且只是在其下方切换模型时才会被触发。

我真正想要的是转换完成事件

我想我可以做到这一点,但我有点希望它已经内置......

Ember.Router.reopen({
  didTransition:function(infos) {
     this._super(infos);
     console.log('transition complete');  
  }
});

更酷的是对转换完成的路线进行回调,我可能必须编写此内容并提交拉取请求。

最佳答案

有几种不同的方法可以解决这个问题

didInsertElement

第一次插入 View 时会触发此事件,但如果在 View 下切换模型则不会触发此事件(因为 Ember 喜欢重用项目,因为它比重建整个 DOM 更便宜)。下面的例子。

简单

如果您只需要执行一次,即第一次插入 View 时,请使用didInsertElement

App.FooView = Em.View.extend({
  setupSomething: function(){
    console.log('the dom is in place, manipulate');
  }.on('didInsertElement')
});

示例:http://emberjs.jsbin.com/wuxemo/1/edit

复杂

如果您需要在从路由本身渲染 DOM 后安排某些内容,您可以使用 schedule 并将其插入到 afterRender 队列中。

App.FooRoute = Em.Route.extend({
  setupController: function(controller, model){
    this._super('controller', model);
    Ember.run.schedule('afterRender', this, function () {
      //Do it here
    });
  }
});

示例:http://emberjs.jsbin.com/wuxemo/2/edit

过渡 promise

过渡的 promise 将在完成渲染项目之前完成。但是,当完成获取所有模型和 Controller 并将它们连接起来时,它为您提供了一个钩子(Hook)。

如果你想连接到转换事件,你可以这样做:

var self = this;
transitionTo('foo').then(function(){
    Ember.run.schedule('afterRender', self, function () {
          //Do it here
    });
})

关于javascript - Ember 过渡和渲染完成事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17437016/

相关文章:

ember.js - Ember-CLI 构建导致段错误

javascript - 如何从 Promise 返回值并在另一个方法中使用它?

javascript - 如何在 javascript 类完成后获得最终响应

javascript - parseInt() 错误地解析带有指数的数字文字

javascript - 如何在 d3 中从 v4 转换为 v3

javascript - 为什么 Ember 模型的命名与其他模型不同?

javascript - 在 React 中使用 Promise 等待 JavaScript 映射函数中的函数完成

JavaScript 正则表达式表情符号

javascript - CSS 动画在 Rails 应用程序中不起作用

ember.js - 如何显式重定向到自动生成的 `error` 路由?