javascript - 在弹出窗口上触发事件 (ExtJS)

标签 javascript events extjs popup

我们目前正在开发一个广泛使用弹出窗口(*)的应用程序,并且在 IE 上遇到了问题(已报告 before 但我找不到任何解决方案)。

问题是这样的:我们的主窗口M打开一个弹出窗口P并保留对其的引用。 P 然后在 M 中的对象上注册事件处理程序。当事件触发时,IE8 会崩溃并显示以下错误消息:

JScript object expected
ext-all-debug.js (Line 1735, Char 17)
Code: 0

这是EXTUTIL.Event.prototype中的触发函数。该代码在 Firefox、Opera 和 Chrome 中运行良好。

我提供了 minimal example产生这种行为。

感谢任何帮助。

(*) 是的,这是有充分理由的。不,Ext.Window 不是一个选项。

最佳答案

好吧,至少我得到了风滚草徽章。 :-)

事实证明,您无法使用 ExtJS 在 IE 中跨浏览器窗口触发事件。 ExtJS 社区支持团队的 Condor 说道:

Ext is NOT safe to be used across windows. Each window should have it's own Ext instance and communication between the two windows should only be done using primitive datatypes (String, Number, Boolean, Date).

This means that you can't register an event handler in a different window, because that would mean passing objects to the other window.

事实证明,这并不完全准确(至少在 IE7 及更高版本中)。您可以跨浏览器窗口引用对象。您不能做的是使用Ext事件系统。

我使用的解决方法是,让 M 调用 P 中的方法,然后触发事件,而不是在 P 中注册事件处理程序“本地”。当然,它不太优雅或灵活,但它确实在所有浏览器中都能很好地工作。此外,我认为保持跨窗口通信简单且定义明确是很好的做法。如果您使用事件处理程序,则必须仔细跟踪发生的情况,例如,您需要确保在窗口关闭之前取消注册所有事件处理程序。

关于javascript - 在弹出窗口上触发事件 (ExtJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3530109/

相关文章:

javascript - 重用 Angular 和 html 的冗余函数

javascript - 如何更改面板内 anchor 标记的样式属性?

ExtJS 网格面板 - 每行多个 "rows"?

javascript - 在rails中使用远程以ajax渲染形式执行脚本

javascript - 使用 jQuery 和 CSS 居中对象

For循环中数组内的Javascript数组

javascript - 是否有任何事件可以重新聚焦浏览器页面?

c++ - 如何使 AddCallback() 更安全 - 对象中不同事件的函数

javascript - 错误 TS2345 : Argument of type 'Event' is not assignable to parameter of type '{ target: { value: string; }; }'

javascript - 将 Accordion 更改为 vbox 仅渲染第一个子项