为什么 KeyboardEvent.target object return false 在 "is" 条件下将其与其类型进行比较?
Why does KeyboardEvent.target object return false on "is" condition comparing it to its type?
我有一个自定义皮肤的 spark 的 RichEditableText 组件。我在我的应用程序中有一个键盘事件侦听器,用于一些自定义热键。如果我正在写入 RichEditableText,我想跳过这些热键,所以我添加了这个:
if (event.target is RichEditableText) {
return;
}
但由于某种原因,这不起作用。所以我使用了 getQualifiedClassName(event.target) 并得到了 spark.components::RichEditableText。我是这样导入的:
import spark.components.RichEditableText;
为什么原来的条件不行?
编辑:
这里有更彻底的记录:
log.info("event.target is RichEditableText " + (event.target is RichEditableText));
log.info("event.target instanceof RichEditableText " + (event.target instanceof RichEditableText));
log.info("event.target.constructor == RichEditableText " + (event.target.constructor == RichEditableText));
log.info("Class(getDefinitionByName(getQualifiedClassName(event.target))) == RichEditableText " + (Class(getDefinitionByName(getQualifiedClassName(event.target))) == RichEditableText));
log.info("event.target actually is " + getQualifiedClassName(event.target));
结果:
false
false
false
true
spark.components::RichEditableText
出于某种原因,只有最慢和最复杂的方法有效。我可以使用它,但如果有人可以分享他们对为什么其他人不起作用的想法,那就太好了。
当侦听器和事件源位于不同的应用程序域中时,可能会发生这种情况。这样您就可以拥有完全相同的限定名称,但它们后面的 class 不同。
getDefinitionByName()
使用您从中调用它的范围的当前应用程序域。因此,在唯一成功的日志行中,您将当前域中的 class 与也在当前域中的 RichEditableText
引用进行比较,这自然会产生 true.
我有一个自定义皮肤的 spark 的 RichEditableText 组件。我在我的应用程序中有一个键盘事件侦听器,用于一些自定义热键。如果我正在写入 RichEditableText,我想跳过这些热键,所以我添加了这个:
if (event.target is RichEditableText) {
return;
}
但由于某种原因,这不起作用。所以我使用了 getQualifiedClassName(event.target) 并得到了 spark.components::RichEditableText。我是这样导入的:
import spark.components.RichEditableText;
为什么原来的条件不行?
编辑:
这里有更彻底的记录:
log.info("event.target is RichEditableText " + (event.target is RichEditableText));
log.info("event.target instanceof RichEditableText " + (event.target instanceof RichEditableText));
log.info("event.target.constructor == RichEditableText " + (event.target.constructor == RichEditableText));
log.info("Class(getDefinitionByName(getQualifiedClassName(event.target))) == RichEditableText " + (Class(getDefinitionByName(getQualifiedClassName(event.target))) == RichEditableText));
log.info("event.target actually is " + getQualifiedClassName(event.target));
结果:
false
false
false
true
spark.components::RichEditableText
出于某种原因,只有最慢和最复杂的方法有效。我可以使用它,但如果有人可以分享他们对为什么其他人不起作用的想法,那就太好了。
当侦听器和事件源位于不同的应用程序域中时,可能会发生这种情况。这样您就可以拥有完全相同的限定名称,但它们后面的 class 不同。
getDefinitionByName()
使用您从中调用它的范围的当前应用程序域。因此,在唯一成功的日志行中,您将当前域中的 class 与也在当前域中的 RichEditableText
引用进行比较,这自然会产生 true.