在Spark tilelist中拖放

时间:2010-10-18 13:29:14

标签: actionscript-3 flex flex4

我正在尝试在火花磁贴列表上启动拖放操作,以便用户可以手动重新排序列表。 问题是:每次我进行拖放操作时,删除/拖动的条目都会重复。

我的主要申请是:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
initialize="initApp()">
<fx:Script source="com/init.as" />
</s:Application>

包含在文件中:

import com.Sequence;

import mx.collections.ArrayCollection;
import mx.core.ClassFactory;
import mx.core.FlexGlobals;

import spark.components.List;
import spark.layouts.TileLayout;

public var main:List=new List()
public var ok: ArrayCollection = new ArrayCollection( [
    {label:"1-redblue", data:"redblue"},
    {label:"2-ncview", data:"ncview"},
    {label:"3-greyscale", data:"greyscale"},
    {label:"4-alg2", data:"alg2"},
    {label:"5-alg", data:"alg"},
    {label:"6-occam", data:"occam"},
    {label:"7-rainbow", data:"rainbow"},
    {label:"8-sst_36", data:"sst_36"},
    {label:"9-occam_pastel-30", data:"occam_pastel-30"},
    {label:"10-ferret", data:"ferret"}
]);

// ActionScript file
public function initApp(){

    var lay:TileLayout=new TileLayout()
    var ae:ClassFactory=new ClassFactory(Sequence)

    main.layout=lay
    main.dataProvider=ok    
    main.dragEnabled=true   
    main.dropEnabled=true
    main.width=FlexGlobals.topLevelApplication.width    
    main.height=FlexGlobals.topLevelApplication.height  
    main.itemRenderer=ae

    this.addElement(main);

}

我的项目渲染器看起来像:

package com
{
    import mx.controls.TextArea;
    import mx.events.FlexEvent;

    import spark.components.BorderContainer;
    import spark.components.supportClasses.ItemRenderer;

    public class Sequence extends ItemRenderer
    {
        private var borderC:BorderContainer=new BorderContainer()
        private var labeli:TextArea=new TextArea()
        private var d:Object

        public function Sequence()
        {
            super();
            this.addElement(borderC)
            this.addEventListener(FlexEvent.CREATION_COMPLETE,doIT)
            borderC.width=borderC.height=100
            labeli.width=labeli.height=100
            borderC.addElement(labeli)

        }

        override public function set data(d:Object):void{
            this.d=d
        }

        override public function get data():Object{
            return d;
        }

        private function doIT(e:FlexEvent):void{
            labeli.text =String(d.label);
        }

    }
}

2 个答案:

答案 0 :(得分:3)

允许在同一组件内拖放的属性(不重复)是: allowDragMove 如果设置为true,则不会发生重复。

答案 1 :(得分:3)

@gpasse让我走上正轨。

对于Flex 4.6中的Spark列表,需要将以下字段设置为true

dragEnabled="true" 
dragMoveEnabled="true" 
dropEnabled="true"