nodo modificar eliminar flex actionscript mxml

modificar - ¿Eliminar nodos XML desde dentro de un repetidor flexible no funciona?



eliminar nodo xml c# (1)

Hmmm ... este me ha llevado un tiempo para al menos llegar a algún tipo de solución para ello. En su evento de clic (y, posteriormente, los eventos de cambio en el área de texto y numericStepper) accede a CurrentTarget. CurrentTarget realmente devolverá una referencia al botón en sí. Como es un botón y no un repetidor, getRepeaterItem () no devolverá nada. De hecho, me sorprende que llamar a getRepeatItem () no haya provocado un error. No hace falta decir que no creo que estén actualizando el xml.

Mi solución externaliza el FormItem en su propio componente (de esa manera, cuando se activa el clic, puedo crear una burbuja en el evento desde el FormItem. De esa manera siempre sé de qué formItem proviene el evento) y luego quito el elemento a través de un xmlListCollection.

Así que tengo un componente separado llamado ChapterFormItem.mxml que contiene

<?xml version="1.0" encoding="utf-8"?> <mx:FormItem xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script> <![CDATA[ private var _chapterData : XML; [Bindable] public function get chapterData() : XML { return _chapterData; } public function set chapterData(value : XML) : void { _chapterData = value; } private function clickHandler(event : MouseEvent) : void { dispatchEvent(new Event("deleteChapter")); } private function textInputChangeHandler(event : Event) : void { chapterData.@Name = textInput.text; } private function numericStepperChangeHandler(event : Event) : void { chapterData.@Value = numericStepper.value; } ]]> </mx:Script> <mx:Metadata> [Event(name="deleteChapter", type="flash.events.Event")] </mx:Metadata> <mx:TextInput id="textInput" width="100" text="{chapterData.@Name}" change="textInputChangeHandler(event)"/> <mx:NumericStepper id="numericStepper" maximum="2000" minimum="0" value="{chapterData.@Value}" change="numericStepperChangeHandler(event)"/> <mx:Button label="x" width="20" click="clickHandler(event)"/> </mx:FormItem>

y en la aplicación principal xml (para este ejemplo) tengo

<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" xmlns:local="*"> <mx:Script> <![CDATA[ import mx.collections.XMLListCollection; import mx.collections.ArrayCollection; [Bindable] private var xml:XML = <Library Name="TestLibrary1"> <Book Name="TestBook1"> <Chapter Name="TestChapter1" Words="530"/> <Chapter Name="TestChapter2" Words="490"/> <Chapter Name="TestChapter3" Words="1030"/> </Book> </Library>; private function itemDeleteHandler(event : Event) : void { var chapterItem : ChapterFormItem = event.currentTarget as ChapterFormItem; var chapterData : XML = chapterItem.chapterData; var xmlListCollection : XMLListCollection = new XMLListCollection(xml.Book.Chapter); var chapterDataIndex : int = xmlListCollection.getItemIndex(chapterData); xmlListCollection.removeItemAt(chapterDataIndex); } ]]> </mx:Script> <mx:Form width="100%" height="100%"> <mx:Repeater id="chapterRepeater" dataProvider="{xml.Book.Chapter}"> <local:ChapterFormItem label="Chapter" direction="horizontal" chapterData="{chapterRepeater.currentItem}" deleteChapter="itemDeleteHandler(event)" /> </mx:Repeater> </mx:Form> </mx:Application>

Tengo el siguiente código de repetidor:

<mx:Repeater id="chapterRepeater" dataProvider="{Library.Book.Chapter}"> <mx:FormItem label="Chapter" direction="horizontal"> <mx:TextInput width="100" text="{ chapterRepeater.currentItem.@Name}" change="event.currentTarget.getRepeaterItem().@Name = event.target.text"/> <mx:NumericStepper maximum="2000" minimum="0" value="{chapterRepeater.currentItem.@Value}" change="event.currentTarget.getRepeaterItem().@Value = event.target.value"/> <mx:Button label="x" width="20" click="delete event.currentTarget.getRepeaterItem()"/> </mx:FormItem> </mx:Repeater>

Actuando en el siguiente XML

<Library Name="TestLibrary1"> <Book Name="TestBook1"> <Chapter Name="TestChapter1" Words="530"/> <Chapter Name="TestChapter2" Words="490"/> <Chapter Name="TestChapter3" Words="1030"/> </Book> </Library>

Esto le permite al usuario editar los nombres y valores de los objetos del Capítulo. Sin embargo, la operación "eliminar" no funciona por alguna razón?

¿Alguien puede aconsejarme sobre cómo hacer referencia a los elementos dentro de un repetidor para eliminarlos?