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 正在从数组中删除项_Apache Flex_Actionscript 3 - Fatal编程技术网

Apache flex 正在从数组中删除项

Apache flex 正在从数组中删除项,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我有2个数组和2个复选框中继器:第二个数组填充了从第一个数组中选择的项目。我可以添加项目没有问题。如果从第一个复选框转发器中取消选中该项,那么如何删除该项 <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns

我有2个数组和2个复选框中继器:第二个数组填充了从第一个数组中选择的项目。我可以添加项目没有问题。如果从第一个复选框转发器中取消选中该项,那么如何删除该项

<?xml version="1.0" encoding="utf-8"?>
<mx: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" 
        creationComplete="updateOlder();"
         >
<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;

        [Bindable]
        public var older:ArrayCollection  = new ArrayCollection ([]);

        [Bindable]
        public var newer:ArrayCollection  = new ArrayCollection ([]);

        private function updateOlder():void{
            older.addItem({label:"item1",desc:"desc1"});
            older.addItem({label:"item2",desc:"desc2"});
            older.addItem({label:"item3",desc:"desc3"});
        }

        private function updateNewer(evt:MouseEvent):void{
            if(evt.target.selected) {
                // add item to array    
                newer.addItem({ label:evt.currentTarget.label,     desc:evt.currentTarget.data });
                newer.refresh();
            } 
            else {
                // remove item from array
                newer.removeItemAt( newRepeater.currentIndex.valueOf() );
                newer.refresh();

            }
        }
    ]]>
</fx:Script>

<mx:HBox width="100%" height="100%">
<mx:VBox width="100%" height="100%">
    <mx:Repeater id="oldRepeater" dataProvider="{older}">
        <mx:CheckBox color="black" fontFamily="Arial" fontSize="14"
                     label="{oldRepeater.currentItem.label}" 
                     data="{oldRepeater.currentItem.desc}" 
                     click="updateNewer(event);"
                     />
    </mx:Repeater>
</mx:VBox> 
    <mx:VBox width="100%" height="100%">
    <mx:Repeater id="newRepeater" dataProvider="{newer}">
        <mx:CheckBox color="red" fontFamily="Arial" fontSize="14"
                     label="{newRepeater.currentItem.label}"
                     data="{newRepeater.currentItem.desc}" 
                     />
    </mx:Repeater>
</mx:VBox> 
</mx:HBox>


</mx:Application>

不仅在中继器迭代其“数据提供程序”时为-1。 以下是您的代码:

<?xml version="1.0" encoding="utf-8"?>
<mx: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" 
        creationComplete="updateOlder();"
         >
<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import flash.events.MouseEvent;
        import mx.controls.CheckBox;
        import mx.core.Repeater;
        [Bindable]
        public var older:ArrayCollection  = new ArrayCollection ([]);
        [Bindable]
        public var newer:ArrayCollection  = new ArrayCollection ([]);

        private function updateOlder():void{
            older.addItem({key:'item1',val:'desc1'});
            older.addItem({key:'item2',val:'desc2'});
            older.addItem({key:'item3',val:'desc3'});
        }

        private function updateNewer(evt:MouseEvent):void {
            var tmpBox:CheckBox = evt.target as CheckBox;
            if(tmpBox.selected) {
                // add item to array   
                newer.addItem({key:tmpBox.label,val:tmpBox.data});
            } 
            else {
                // remove item from array
                var newArrIndex: int = getArrayElementIndex(newer, older[tmpBox.instanceIndex]);
                if(newArrIndex != -1){
                    newer.removeItemAt(newArrIndex);
                }
            }
            newer.refresh();
        }

        private function getArrayElementIndex(arr:ArrayCollection, elementValue:Object):int{
            for (var retInd: int = 0; retInd < arr.length; retInd++) {
                if (arr[retInd]['key'] == elementValue['key'] && arr[retInd]['val'] == elementValue['val']) {
                    return retInd;
                }
            }
            return -1;
        }       
    ]]>
</fx:Script>

<mx:HBox width="100%" height="100%">
<mx:VBox width="100%" height="100%">
    <mx:Repeater id="oldRepeater" dataProvider="{older}">
        <mx:CheckBox color="black" fontFamily="Arial" fontSize="14"
                     label="{oldRepeater.currentItem['key']}" 
                     data="{oldRepeater.currentItem['val']}" 
                     click="updateNewer(event);"
                     />
    </mx:Repeater>
</mx:VBox> 
    <mx:VBox width="100%" height="100%">
    <mx:Repeater id="newRepeater" dataProvider="{newer}">
        <mx:CheckBox color="red" fontFamily="Arial" fontSize="14"
                     label="{newRepeater.currentItem['key']}"
                     data="{newRepeater.currentItem['val']}" 
                     />
    </mx:Repeater>
</mx:VBox> 
</mx:HBox>
</mx:Application>