【问题标题】:Bubbling object or properties?冒泡对象或属性?
【发布时间】:2013-08-16 14:04:32
【问题描述】:

我有一个冒泡事件,它激活了根类中的一个事件。从根类中,我添加了一个对象,该对象想要使用激活冒泡事件的对象的属性。我用这段代码来做这个:

public function addInfoWindow(e:Event):void
{
    dockTarget = e.target as DisplayObject;
    infoWindow = new InfoWindow();
    addChild(infoWindow);
    infoWindow.setContent(dockTarget.x, dockTarget.y, dockTarget._id, dockTarget._name, dockTarget._description);
}

x 和 y 值可以很好地传递,但使用属性 _id、_name 和 _description 我会得到“通过静态类型 DisplayObject 的引用访问可能未定义的属性 _id”。错误。

我假设当我将事件目标作为 displayObject 传递时,目标对象变为静态。

那么还有另一种方法可以使对象或其属性冒泡吗?或者有没有其他方法可以达到这个效果?

【问题讨论】:

  • 您可能需要检查 dockTarget 是否是您期望的对象。另外,你在哪里添加你的事件监听器?如果是dockTarget,也许你想使用e.currentTarget?
  • 你可能想用dockTarget.hasOwnProperty('_id')检查dockTarget是否有属性_id等
  • 它得到了正确的对象并且它具有属性_id。不过我终于解决了。我没有使用 displayObject,而是使用了 object。

标签: actionscript-3 events event-bubbling


【解决方案1】:

不要将 e.target 作为 DisplayObject 传递,而是将其作为 Object 传递。

public function addInfoWindow(e:Event):void
{
    dockTarget = e.target as Object;
    infoWindow = new InfoWindow();
    addChild(infoWindow);
    infoWindow.setContent(dockTarget.x, dockTarget.y, dockTarget._id, dockTarget._name, dockTarget._description);
}

【讨论】:

  • 虽然转换为Object 确实有效,但如果e.target 是一个,则转换为MovieClip 时,通常最好先通过if (e.target is OneClass) {...} 查询其类型,以便您可以访问OneClass 类等的属性。如果您扩展MovieClip 以外的其他内容,例如,如果您不需要使用本地时间线,则此方法特别有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 2016-08-11
相关资源
最近更新 更多