我试着在Haxe / JS中听点击事件:
static function main()
{
var initHandler:Dynamic = init;
Browser.window.onload = initHandler;
}
static private function init()
{
var clickHandler:Dynamic = learnBtn;
Browser.document.getElementById("readMoreBtn").addEventListener("click", clickHandler);
}
static private function learnBtn()
{
}
我真的需要这一切吗?
为什么我不能这样做(没有initHandler
和clickHandler
):
Browser.window.onload = init;
OR
Browser.document.getElementById("readMoreBtn").addEventListener("click", learnBtn);
所有HTML后都没有加载JS文件?我可以定义一下吗?
它与此主题无关,但我尝试谷歌搜索Haxe.org,但没有。它是什么"无类型"关键字。
答案 0 :(得分:2)
使用Dynamic
中间变量间接解决了您的问题,但您应该尝试理解编译器错误消息。
编译器说的是什么:
如果你写:
function init() {
// do stuff on window.onload
}
Browser.window.onload = init;
编译器会告诉你:
Test.hx:22: characters 68-117 : Void -> Void should be js.html.EventListener
Test.hx:22: characters 68-117 : Void -> Void should be Dynamic -> Void
这是什么意思?这意味着您的init()
签名Void->Void
应为js.html.EventListener
,is defined as Dynamic->Void
。
正确的代码:
换句话说,你init()
函数应该有一个参数,所以应该声明为:
function init(event:Dynamic) {
// do stuff on window.onload
}
强制编译
您可以告诉编译器让您编写可能不正确(但我们知道有效)的代码:
var foo:Dynamic = init;
Browser.window.onload = foo; // always happy
Browser.window.onload = untyped init; // do not type, please
Browser.window.onload = cast init; // I'm sure I'm right