繁体   English   中英

从itemRenderer调用父函数

[英]Call parent function from an itemRenderer

我想从itemRenderer调用名为“edit_groups()”的父函数。 我的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}"/>

关心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>

您可以像这样引用outerDocument

<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组件 ,则可能需要使用:

parentDocument.parentDocument.functionName();

我也面临过类似的情况,但根据我的说法,最好的方法是从项呈示器中调度一些自定义事件,并在父组件中捕获该事件。 在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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM