Apache flex 从itemRenderer调用父函数

Apache flex 从itemRenderer调用父函数,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我想从itemRenderer调用名为“edit_groups()”的父函数。 my itemRenderer的代码是: <mx:VBox id="vbx_container" paddingBottom="4" paddingLeft="4" paddingRight="4" paddingTop="4" borderStyle="solid" dropShadowEnabled="true" width="100%" height="100%" horizontalScroll

我想从itemRenderer调用名为“edit_groups()”的父函数。 my itemRenderer的代码是:

<mx:VBox id="vbx_container" paddingBottom="4" paddingLeft="4" paddingRight="4" paddingTop="4" borderStyle="solid"
    dropShadowEnabled="true" width="100%" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" >
    <mx:Canvas width="100%" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" >
        <mx:Image id="image" width="100" height="100" source="{data.thumb}" scaleContent="true" maintainAspectRatio="true"
            complete="{image_smoothing_handler(event);}" trustContent="true" doubleClick="{CALL THE PARENT FUNCTION "edit_groups()"}"/>
    </mx:Canvas>
</mx:VBox>

我从以下应用程序调用itemRenderer:

list_groups_modify.itemRenderer=new ClassFactory(groups.list_groups_modify_item_renderer);

<mx:Label text="{data.label}" textAlign="center" maxWidth="60" toolTip="{data.label}"/>
list\u groups\u modify.itemRenderer=newclassFactory(groups.list\u groups\u modify\u item\u renderer);
问候
Zeeshan

试试这个,使用
parentDocument

<mx:VBox id="vbx_container" paddingBottom="4" paddingLeft="4" paddingRight="4" paddingTop="4" borderStyle="solid"
    dropShadowEnabled="true" width="100%" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" >
    <mx:Canvas width="100%" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" >
        <mx:Image id="image" width="100" height="100" source="{data.thumb}" scaleContent="true" maintainAspectRatio="true"
            complete="{image_smoothing_handler(event);}" trustContent="true" doubleClick="parentDocument.edit_groups()"/>
    </mx:Canvas>
</mx:VBox>

您可以像这样引用
外部文档

<mx:VBox id="vbx_container" paddingBottom="4" paddingLeft="4" paddingRight="4" paddingTop="4" borderStyle="solid"
    dropShadowEnabled="true" width="100%" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" >
    <mx:Canvas width="100%" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" >
        <mx:Image id="image" width="100" height="100" source="{data.thumb}" scaleContent="true" maintainAspectRatio="true"
            complete="{image_smoothing_handler(event);}" trustContent="true" doubleClick="{outerDocument.edit_groups()}"/>
    </mx:Canvas>
</mx:VBox>


确保尝试引用的内容设置为公共函数或变量。

如果出现错误1069,并且项目呈现器是一个单独的mxml组件,则可能需要 使用:


我也遇到过类似的情况,但据我所知,最好的方法是从项目渲染器中分派一些自定义事件,并在父组件中捕获该事件。在eventlistener内部调用父函数。即使itemrenderer在单独的mxml文件或actionscript类中,这也可以工作。

在升级到Flex SDK 4.6后,我偶然发现这篇文章有类似的问题。我得到了可怕的错误1069与代码,过去工作得很好。首选答案不起作用

但是,我通过将其更改为使用解决了此问题:

document.owner.parentDocument

您还可以使用这段代码(放置在项目渲染器中)查找下一个适用的父级:

internal function findTarget():MyTargetClass
{
    for (var p:* = this; !(p is MyTargetClass || p == null); p = p.parentDocument) {}
    return p;
}
用法示例:

override public function set data(value:Object):void
{
    super.data = value;
    findTarget().myFunction(value);
}

@Zeeshan-抱歉,我的想法不对,请改为尝试
parentDocument
,回答已更新。我原以为这会回答我的相同问题,但改为出现错误1069。虽然编译器允许我通过,但在运行时我被告知它找不到我的公共函数!(我的itemrenderer位于Flash Builder 4中一个单独的MXML文件中)
override public function set data(value:Object):void
{
    super.data = value;
    findTarget().myFunction(value);
}