apache-flex 如何获取对“按下鼠标”事件中的Flex列表的列表的引用

2uluyalo  于 2022-11-01  发布在  Apache
关注(0)|答案(1)|浏览(146)

我在mxml中有一个列表。当用户长按列表中的一个项目时,我需要显示一个菜单。菜单将显示对被按下的项目的一些操作。
我还必须使按下的项目成为列表中的选定项目。所以我需要一个对列表的引用。我找不到一个正常的方法来到达列表,所以我这样做了:

var list:Object = event.currentTarget.parent.parent.parent.parent.parent

这当然是可怕的。我正在寻找一个更好的方法来获得对列表的引用。
下面是我的代码:

<s:List id="catList" x="0" y="0" width="100%" height="100%" click="selectItemHandler(event)">
    <s:itemRenderer>
        <fx:Component>
            <s:IconItemRenderer 
                styleName="labelFontStyle"
                messageStyleName="descriptionFontStyle"
                labelField="labelField"
                messageField="descriptionField"
                dataChange="onDataChange(event)"
                mouseDown="onMouseDown(event)">
                <fx:Script>
                    <![CDATA[
                        import mx.events.FlexEvent;
                        protected function onMouseDown(event:MouseEvent):void
                        {
                            try 
                            {
                                var tg:Object = event.target;
                                var selectedItem:Object = event.currentTarget.data;
                                if (selectedItem != null)
                                {
                                    // Here I need to set the selectedItem property of 
                                    // the owning list. 
                                    // I don't know how to get to the list so I did this.
                                    var list:Object = event.currentTarget.parent.parent.parent.parent.parent;
                                    list.selectedItem = selectedItem;   
                                }
                            } catch (e:Error) {}
                        }
                    ]]>
                </fx:Script>                
            </s:IconItemRenderer>
        </fx:Component>
    </s:itemRenderer>   
</s:List>
7fhtutme

7fhtutme1#

我不确定,但不会只是在项目渲染器的onMouseDown中设置selected属性就行了吧?

selected = true;

如果没有,请检查是否可以得到您的列表:

var myList:List = owner as List;

另一种方法是创建一个包含项目的自定义事件,并从项目渲染器中触发该事件。

相关问题