正在调度自定义事件
Dispatching custom events
我的VS 2012 Update 3中安装了0.9.0.1版本的typescript编译器。
我想调度一个自定义事件,但lib.d.ts中声明的环境变量没有公开预期的构造函数签名。
当我使用时
var myEvent = new CustomEvent("my:event:type", { detail: { some: "data"} });
window.dispatchEvent(myEvent);
类型脚本编译器抱怨,因为据他说,只有
var myEvent = new CustomEvent();
是正确的。
根据Chrome 27和Aurora 24.02的说法,后者是错误的,因为"缺少论据"
MDN还列出了实际正确但不适用于typescript构造函数的签名。
我现在的想法是将已知的正确构造函数签名添加到环境变量声明中,但不涉及附带的lib.d.ts文件。这在技术上可行吗?我无法想出正确的语法,语言规范也没有提到如何合并两个这样的声明。
或者,我只是编辑了lib.d.ts,在IDE重新启动后,它为我提供了更新的签名。尽管如此,我还是不想以这种方式篡改第三方文件。
最后,我(sh|c)是否可以使用其他机制来编写分派自定义事件的类型脚本代码?
(更新:重新启动IDE会正确地重新加载lib.d.ts。此外,更正了虚构事件类型名称)
这不是lib.d.ts
的一部分的原因是Internet Explorer在IE10中不支持此对象。
如果CustomEvent
定义纯粹是一个接口,那么您可以这样扩展它:
interface CustomEvent {
new(eventType: string, data: {});
}
但是CustomEvent
构造函数实际上是在变量声明中定义的,您不能扩展它:
declare var CustomEvent: {
prototype: CustomEvent;
new(): CustomEvent;
}
在等待InternetExplorer/TypeScript库更新时,您可以使用此(看起来很糟糕)解决方案来获取自定义事件。
class StandardsCustomEvent {
static get(eventType: string, data: {}) {
var customEvent = <any>CustomEvent;
var event = new customEvent(eventType, data);
return <CustomEvent> event;
}
}
var x = StandardsCustomEvent.get("myevent", { detail: { some: "data"} });
这修复了编译器警告,但不会使其在IE10或更高版本中工作,您需要polyfill。
我最终完成了所有这些:
- 在生成时使用--nolib选项
- 添加lib.d.ts的本地副本
- 修补预期的构造函数签名
- 为IE添加polyfill<=11由MDN提议
var event = <CustomEvent>(new (<any>CustomEvent)('specifiedEvent'))
可能是一个解决方案。好看又狡猾。
- 如何在javascript中创建自定义事件
- 如何在d3.js中自定义事件侦听器
- jquery自定义事件混淆
- jquery可从自定义事件中排序
- 向ASP控件添加自定义事件
- 使用自定义数据属性或将数据绑定到处理程序来处理事件
- 在放置目标时,输入并离开自定义事件
- 处理角度自定义指令中的onReady事件
- 如何将自定义参数传递到FullCalendar事件提要
- AngularJS自定义过滤器未触发点击事件
- 加载自定义磁贴后的谷歌地图事件
- Chris Coyer中call()的用法'的自定义事件示例
- 在 Chrome 扩展程序中创建自定义事件的最惯用方式
- 如何获取 jQuery 以触发本机自定义事件处理程序
- 允许在自定义事件上“查找使用实例”的 IDE
- 如何禁用自定义复选框的单击事件
- 如何将 DOM 元素绑定到自定义 $.touchpress 事件
- 如何从视图中触发事件(自定义事件)并在 Ext JS 的控制器中处理它们
- 高图表-覆盖图例点击和悬停事件自定义逻辑
- 必应地图点击事件自定义信息框html