在Ember中捕获iframe加载事件

时间:2017-07-14 17:38:00

标签: javascript iframe ember.js

我需要知道iframe何时加载了它的内容,并且我试图坚持Ember的做事方式。

<iframe src="" {{action "onLoad" on="load"}}></iframe>

看起来非常简单明了,但这个动作永远不会被调用。有谁知道我可能做错了什么?或者也许是检测这类事情的更好方法?

2 个答案:

答案 0 :(得分:1)

更新

创建名为my-component的组件,在my-component.hbs

<iframe src="" onload={{action "onLoading"}}></iframe>
my-component.js中的

import Ember from 'ember';
export default Ember.Component.extend({    
    actions: {
        onLoading() {
            console.log('OnLoad');
        }
    }
});

即使它不在组件中也是如此。

您可以在此处找到支持的事件列表。https://guides.emberjs.com/v2.10.0/components/handling-events/#toc_event-names

但是没有提到load。所以我怀疑你需要提到自定义事件。 您可以尝试在onload文件

中的customEvents对象中定义app.js事件
App = Ember.Application.extend({
    modulePrefix: config.modulePrefix,
    podModulePrefix: config.podModulePrefix,
    Resolver,
    customEvents:{
      load:'load'
    }
});

参见:
https://emberjs.com/api/ember/2.14.0/classes/Ember.Application/properties/customEvents?anchor=customEvents

答案 1 :(得分:0)

这不是很好,但这可以解决任何更好的解决方案。

import Ember from 'ember'

export default Ember.Route.extend({
  activate() {
    Ember.run.schedule('render', () => {
      Ember.$('iframe').one('load', () => { this.send('onLoad') })
    })
  }
})

每次输入路线后,在路径模板完成渲染后运行。它从iframe捕获load事件并手动触发动作让Ember接管。不完美,但也不是很糟糕。