Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 在Flex 4列表中处理鼠标单击以查找所选项目(因为itemClick已消失)_Apache Flex_List_Flex4_Click_Flex4.5 - Fatal编程技术网

Apache flex 在Flex 4列表中处理鼠标单击以查找所选项目(因为itemClick已消失)

Apache flex 在Flex 4列表中处理鼠标单击以查找所选项目(因为itemClick已消失),apache-flex,list,flex4,click,flex4.5,Apache Flex,List,Flex4,Click,Flex4.5,我已经为我的问题准备了一个简化的测试用例。如果您将下面的2个文件放入一个项目中,它将立即在您的Flash Builder中运行 我试图在弹出窗口中显示字符串列表和确认复选框: 在实际应用程序中,我使用列表中选择的字符串发送一个自定义事件,但在下面的测试代码中,我只调用trace(str) 我的问题:如果我使用click事件,那么即使我在滚动条上单击,窗口也会关闭(当上次使用时选择了某个项目时,下面的!str检查没有帮助)。如果我使用change event,那么当我上次单击同一项目时,窗口不会

我已经为我的问题准备了一个简化的测试用例。如果您将下面的2个文件放入一个项目中,它将立即在您的Flash Builder中运行

我试图在弹出窗口中显示字符串列表和确认复选框:

在实际应用程序中,我使用列表中选择的字符串发送一个自定义事件,但在下面的测试代码中,我只调用trace(str)

我的问题:如果我使用click事件,那么即使我在滚动条上单击,窗口也会关闭(当上次使用时选择了某个项目时,下面的!str检查没有帮助)。如果我使用change event,那么当我上次单击同一项目时,窗口不会关闭。itemClick事件似乎不再出现在中

对于如何处理这个可能经常出现的问题,您有什么建议吗

在这种情况下,编写自定义项目呈现器并为每个项目使用click事件处理程序似乎有些过分,因为我在列表中有字符串

Test.mxml:(请单击myBtn几次-查看我的单击和更改问题)


火花列表发送一个“.CHANGE”。您可以侦听此事件,以了解列表中的选择何时发生更改

    <s:List id="myList" dataProvider="{myData}" 
            change="handleIndexChange()"
            width="100%" height="100%" fontSize="24" />
此外,请确保在关闭窗口(并取消选择)之前将所选项目与事件一起发送

至于您关于绑定警告的问题:您收到该消息是因为您没有将“myData”标记为可绑定。要解决此问题,只需使用[Bindable]标记:

[Bindable]
private var myData:ArrayList = new ArrayList();
或者,如果不需要绑定,则完全跳过绑定,只需将数据提供程序分配到ActionScript中的列表:

myList.dataProvider = myData;

在Test.mxml中,修改如下代码:

  <fx:Script>
            <![CDATA[
                import mx.managers.PopUpManager;

                private var _popup:Popup;

                private function showPopup(event:MouseEvent):void {
                    _popup = new Popup();
                    PopUpManager.addPopUp(_popup, this, true);
                    PopUpManager.centerPopUp(_popup);
                }
            ]]>
        </fx:Script>

在你的Popup.mxml中,我不知道为什么你在close函数中有TimerEvent


此外,跟踪也不会显示,因为您在单击警报的“是”按钮后立即调用close()函数。

如果您完全想要显示所选项目,我建议您使用两种解决方案。否则,RIAStar提供的解决方案将起到作用

在弹出窗口中侦听RenderAddandRenderRemove事件 如前所述,您可以轻松访问列表的渲染器,而不会干扰其VirtualYout业务

使用自定义渲染器
我知道。但只要保持代码干净,ItemRenders就不会占用应用程序的内存。数据绑定将无法检测分配,这意味着您需要使用[Bindable]标记声明变量myData。谢谢,但正如我在原始问题中所写的:如果您多次使用myBtn并再次尝试选择相同的项,那么它将无法工作。弹出窗口没有关闭,跟踪也没有打印(即,定制事件没有在实际应用中发送)。这不是Alexander Farber所要求的。在这里,您只需重新初始化弹出窗口。您丢失了有关所选项目的信息。很抱歉,TimerEvent是我在TitleWindow标题中显示倒计时的真实应用程序的剩余内容。其实我的真实应用程序中有一个项目渲染器,所以我可以使用它。但是,当我在其click事件处理程序中时,如何知道所选字符串?
        public function close():void {
            myList.selectedIndex = -1;
            PopUpManager.removePopUp(this);
        }
[Bindable]
private var myData:ArrayList = new ArrayList();
myList.dataProvider = myData;
  <fx:Script>
            <![CDATA[
                import mx.managers.PopUpManager;

                private var _popup:Popup;

                private function showPopup(event:MouseEvent):void {
                    _popup = new Popup();
                    PopUpManager.addPopUp(_popup, this, true);
                    PopUpManager.centerPopUp(_popup);
                }
            ]]>
        </fx:Script>