Apache flex ItemRenderer中的导航

Apache flex ItemRenderer中的导航,apache-flex,actionscript,air,Apache Flex,Actionscript,Air,我们如何在itemRenderer中导航 例如,在视图中,我们使用View.navigator(ViewNavigator)来推送和弹出视图,ItemRenderer中没有这样的功能 视图内导航(简单) 在项目渲染器中导航(不可能? 在创建itemRenderer时使用 <comp:MyItemRenderer navigator="{navigator}"/> <s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009

我们如何在itemRenderer中导航

例如,在视图中,我们使用View.navigator(ViewNavigator)来推送和弹出视图,ItemRenderer中没有这样的功能

视图内导航(简单)


在项目渲染器中导航(不可能?


在创建itemRenderer时使用

<comp:MyItemRenderer navigator="{navigator}"/>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                autoDrawBackground="true" height="56">
<fx:Script>
    <![CDATA[
        import spark.components.ViewNavigator;

        private var _navigator:ViewNavigator;

        public function set navigator(value:ViewNavigator):void
        {
            _navigator = value;
        }
    ]]>
</fx:Script>

<s:HGroup>
    <s:Button label="Button" click="{_navigator.pushView(view.QuestionnaireCategory1View)}"/>
</s:HGroup>

在itemRenderer中(此处称为MyItemRenderer)



您希望在用户与项目呈现器交互时使用冒泡事件捕捉

<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark">
    <s:HGroup>
        <s:Button text="Button" click="dispatchEvent(new Event('buttonClicked', true));"/>
    </s:HGroup>
</s:ItemRenderer>

然后,在使用项目渲染器执行此操作时:

<DataGroup id="group" itemRenderer="YourItemRenderer" dataProvider="{someData}" creationComplete="group.addEventListener('buttonClick', someHandlerFunction);" />


然后在你的处理函数中,做你想做的任何动作。在本例中,我将在数据组的创建完成时添加事件侦听器,但您可以将其添加到主容器的创建完成事件中。通过这种方式,您可以保持项目渲染器的解耦性和可重用性,并使用适当的软件实践(数据输入、事件输出)。

Ye我就是这样做的,但您必须不断向导航器传递以下信息:(至少会认为它是静态可访问的!这可能解决了问题,但这是一种可怕的做法。此外,如果您没有为“项目渲染器”创建工厂,那么它不是项目渲染器,而是组件。-1很好,但我们如何知道单击了什么?即如果项目渲染器中有多个按钮,您可以要么将事件类型更改为更具体的类型,要么创建一个自定义事件类,该类可以保存更多数据,以便以后使用。这实际上取决于您尝试执行的操作。确保您的事件是对操作的描述,而不是对组件的描述。目前我使用的是“buttonClicked”,但这并不合适,因为我不知道是什么t那按钮不起作用。
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark">
    <s:HGroup>
        <s:Button text="Button" click="dispatchEvent(new Event('buttonClicked', true));"/>
    </s:HGroup>
</s:ItemRenderer>
<DataGroup id="group" itemRenderer="YourItemRenderer" dataProvider="{someData}" creationComplete="group.addEventListener('buttonClick', someHandlerFunction);" />