[英]Actionscript error when executing eventlistener in javascript
我有以下代码使用actionscript和indesign sdk:
在我的课开始时
[ Embed (source= "resources/js/eventHandlers.jsx" , mimeType= "application/octet-stream" )]
private static var jsHandler:Class;
var jsxInterface:HostObject = HostObject.getRoot(HostObject.extensions[0]);
在我的职能:
jsxInterface.eval( new jsHandler().toString());
jsxInterface.init( this );
document.xmlElements.item(0).xmlElements.item("docpreset").importXML(File.applicationStorageDirectory.resolvePath("temp/cstyles.xml"));
jsxInterface.afterImport(document);
这是eventHandlers.jsx中的代码:
var asInterface = {};
function init(wrapper) {
asInterface = wrapper;
}
function afterImport(document) {
document.addEventListener (Document.AFTER_IMPORT, asInterface.test());
}
并且从javascript我称之为:
public function test():void {
trace("ole");
}
现在,测试函数可以正确执行,但是在此之后,下一个被调用的函数再次是:
jsxInterface.afterImport(document);
然后抛出一个错误:
Error: ActionScript error: Error: Missing required parameter 'handler' for method 'addEventListener'.
我已经不知道该做什么。 我只想导入xml,并在导入完成后调度一个事件。
我不知道为什么我什至必须调用javascript函数,并且无法在普通的eventListener中使用document.AFTER_IMPORT。 谁能帮我解决这个问题?
问题似乎是在afterImport()
方法中,您错误地添加了事件侦听器。
addEventListener()
方法的第二个参数应该是函数的名称 (从技术上讲,它是对函数的引用)。 在代码中,您在函数名称的末尾加上了括号-因此,正在执行该函数,而不是提供对该函数的引用。
当函数执行时,它不返回任何内容,因此缺少addEventListener()
的第二个参数,您会收到错误消息。
尝试以下方法:
function afterImport(document) {
document.addEventListener (Document.AFTER_IMPORT, asInterface.test);
// notice no "()" here ^^
}
[编辑]
由于仍然出现错误,因此您可能需要添加一些代码以进一步调试它。
在上面的方法中,注释掉addEventListener行,并替换为以下内容:
// for debugging
if (asInterface.test == null)
{
trace("fail: it's null");
}
else if (asInterface.test is Function)
{
trace("success: it's a function");
// this is the only code path where your error will not occur
}
else
{
trace("fail: i don't know what this is: ", asInterface.test);
}
我认为您必须像这样启动AS包装器:
jsxInterface.init( this );
那么AS API便可用于js代码。
洛伊奇
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.