首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flex拖放HorizontalList控件的重新排序-从索引到索引查找?

Flex拖放HorizontalList控件的重新排序-从索引到索引查找?
EN

Stack Overflow用户
提问于 2009-05-06 20:05:29
回答 2查看 5K关注 0票数 0

我有一个带有2个Flex3控件的HorizontalList项目,其中一个已启用拖放。两个控件总是有相同数量的项,并且是相关的.第一个控件的索引0与第二个控件的索引0匹配,依此类推。

自然,当使用拖放重新排序第二个控件时,我希望第一个控件中的项反映相同的重新排序。我认为我可以处理控件的实际更新,但我在找到通过拖放移动的项的和到索引时遇到了困难。

在允许拖放的控件上使用dragDrop方法,并在调试器中仔细阅读event.currentTarget (而不是event.target 因为医生这么说)的内容,显示一个名为selectedIndex的公共属性,它似乎保存了索引中的,但我没有看到任何属性会告诉我到索引。

我能俯瞰这房子吗?我要根据别的什么来推断吗?有更好的方法吗?

更新:--一种可接受的解决方案也可能是迭代HorizontalList的内容,并将内部索引值保存到一个数组中,然后该数组可用于重新排序另一个列表的dataProvider;但我不知道如何迭代列表内容,因此我也陷入了困境。有什么帮助吗?

这是我的密码:

main.mxml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:com="components.*"
    layout="absolute" 
>
    <mx:Script>
        <![CDATA[
            import mx.events.DragEvent;
            import mx.controls.Alert;
            import mx.collections.ArrayCollection;

            //these two variables are junk data to represent 
            //what we will get back from our data services...
            [Bindable] 
            private var btnData:ArrayCollection = new ArrayCollection(
                [
                    {title:'title1', index:0},
                    {title:'title2', index:1},
                    {title:'title3', index:2},
                    {title:'title4', index:3}
                ]
            );
            [Bindable] 
            private var chainData:ArrayCollection = new ArrayCollection(
                [
                    {tmp:'testing 1'},
                    {tmp:'testing 2'},
                    {tmp:'testing 3'},
                    {tmp:'testing 4'}
                ]
            );

            //handle button re-ordering
            private function handleBtnReorder(event:DragEvent):void{
                Alert.show(event.action.toString());
            }
        ]]>
    </mx:Script>

    <mx:HorizontalList
        id="ChainView"
        dataProvider="{chainData}"
        itemRenderer="components.ItemRenderers.ChainLinkRenderer"
        left="20"
        right="20"
        top="20"
        height="300"
        rowHeight="300"
        columnWidth="500"
        rollOverColor="#ffffff"
        selectionColor="#eeeeee"
    />

    <mx:HorizontalList 
        id="btnList" 
        dataProvider="{btnData}"
        dragEnabled="true" 
        dropEnabled="true"
        dragMoveEnabled="true"
        dragDrop="handleBtnReorder(event)"
        itemRenderer="components.ItemRenderers.BtnListRenderer"
        horizontalCenter="true"
        left="20"
        right="20"
        top="320"
        height="50"
        rowHeight="35"
        rollOverColor="#ffffff"
        selectionColor="#ffffff"
    />

</mx:Application>

Alert.show(...)没有显示任何有用的东西,我在该行上设置了一个断点,以便检查事件参数。

我认为定制的itemRenderer并不重要(它们的代码还不多),所以为了简洁起见,我会把它们排除在外。如果你认为它们很重要,请告诉我,我会在这里编辑它们。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-07 14:43:33

结果是,解决方案是从使用dragDrop事件切换到dragComplete事件;此时,绑定的dataProvider已经更新以反映重新排序。

票数 2
EN

Stack Overflow用户

发布于 2010-02-12 10:59:45

这就是为什么模型定位器模式是为!

您必须将您的dataProvider移动到单个类(例如,模型),否则项目呈现器可以轻松地访问它。您的项目没有属性索引,因为它已经由ArrayCollection.getItemIndex(.)提供

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/831482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档