Flex 3处理数据 访问 XML 数据4

出可以对XML元素与对象赋值外,你也可以通过使用E4X组装与传递XML对象。

下边的例子中,你可以使用prependChild()和appendChild()方法来向XML对象的列表中的前边或后边增减一个属性。类似 的,使用insertChildBefore()方法和insertchildAfter()方法来增加属性在指定的属性之前或之后。要删除元素,使用 delete()方法从XML中移除节点。

<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="500" height="600" creationComplete="myDataGrid.selectedIndex=0; validateForm();" > <mx:Script> <!--[CDATA[ import mx.controls.Alert; // Constants private const SELECTED_ITEM:uint = 0; private const THE_LIST:uint = 1; private const BEFORE:uint = 0; private const AFTER:uint = 1; // Flag: is the form valid? [Bindable] private var formIsValid:Boolean; // Flag: does a selection exist in the data grid? [Bindable] private var selectionExists:Boolean; // Holds the index of the next item in the // data grid following the deletion of a book item. private var newSelectedIndex:int; // Model: XML structure describing // some of the books in my collection. [Bindable] private var myBooks:XML = <books> <book ISBN="1590595181"> <title>Foundation ActionScript Animation: Making Things Move</title> <author>Keith Peters</author> <amazonUrl>http://tinyurl.com/npuxt</amazonUrl> </book> <book ISBN="1582346194"> <title>Send in the Idiots: Stories from the Other Side of Autism</title> <author>Kamran Nazeer</author> <amazonUrl>http://tinyurl.com/lo5ts</amazonUrl> </book> </books> // Add a new book. private function addBookHandler():void { // Create a new XML Object from the form information var newBook:XML = <book ISBN={isbnInput.text}> <title>{titleInput.text}</title> <author>{authorInput.text}</author> <amazonUrl>{amazonUrlInput.text}</amazonUrl> </book>; // Save the selected book's index so it can be reselected // in the grid once the new book is added. var selectedBookIndex:uint = myDataGrid.selectedIndex; // Does the user want to add the new // book relative to the selected book in the // data grid or relative to the list itself? if (addRelativeTo.selectedIndex == SELECTED_ITEM) { // Add the new item relative to the selected item. var selectedBook:XML = myBooks.book[selectedBookIndex]; // Does the user want to add it before or after // the selected item? if (addPosition.selectedIndex == BEFORE) { // Add new item before selected item myBooks = myBooks.insertChildBefore(selectedBook, newBook); } else { // Add new item after selected item myBooks = myBooks.insertChildAfter(selectedBook, newBook); } } else { // Add the new item relative to the whole list of books. if (addPosition.selectedIndex == BEFORE) { // Add new item at the start of the list. myBooks = myBooks.prependChild(newBook); } else { // Add new item at the end of the list. myBooks = myBooks.appendChild(newBook); } } // Select the previously selected item in the grid // so the user doesn't lose their position. (If a new book was // added before the currently selected item, that item's // new index will be one greater, so select that.) var newSelectedIndex:uint = (addPosition.selectedIndex == BEFORE) ? selectedBookIndex + 1: selectedBookIndex; myDataGrid.selectedIndex = newSelectedIndex; } // Delete selected book private function deleteBookHandler():void { // Save the currently selected index. var selectedBookIndex:int = myDataGrid.selectedIndex; // Delete the currently selected book. delete (myBooks.book[selectedBookIndex]); // Reselect the next logical item in the data grid. newSelectedIndex = (selectedBookIndex==0) ? 0 : selectedBookIndex - 1; // Change the selected index of the data grid // at a later frame. See note on changeDataGridIndex() // method for more details on this workaround. callLater ( changeDataGridIndex ); } // This is a workaround for a known issue with // List-based components where deleting an item // from the control's dataProvider leaves the // selectedIndex at an incorrect value. The workaround // is to reassign the data provider at least a // frame later and to change the index there. private function changeDataGridIndex ():void { // Reassign the data grid's data provider. myDataGrid.dataProvider = myBooks.book; // Set the selected index. myDataGrid.selectedIndex = newSelectedIndex; // Validate the form to make sure that there // is actually a selection (that the grid is // not empty). validateForm(); } // Perform simple form validation. private function validateForm():void { // Is the form valid? formIsValid = isbnInput.text != "" && titleInput.text != "" && authorInput.text != "" && amazonUrlInput.text != ""; // Does a selection exist in the data grid? selectionExists = myDataGrid.selectedIndex != -1; } ]]--> </mx:Script> <!-- User interface --> <mx:Panel title="Assigning XML data" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10" > <!-- List of books --> <mx:DataGrid id="myDataGrid" dataProvider="{myBooks.book}" change="validateForm();" > <mx:columns> <mx:DataGridColumn dataField="@ISBN" headerText="ISBN" width="85"/> <mx:DataGridColumn dataField="title" headerText="Title"/> <mx:DataGridColumn dataField="author" headerText="Author"/> <mx:DataGridColumn dataField="amazonUrl" headerText="Web site"> <mx:itemRenderer> <mx:Component> <mx:LinkButton label="Visit" click="navigateToURL(new URLRequest(data.amazonUrl), 'blank');" /> </mx:Component> </mx:itemRenderer> </mx:DataGridColumn> </mx:columns> </mx:DataGrid> <!-- New book form. Prepopulated with a book for easier testing. --> <mx:Form width="100%" autoLayout="false"> <mx:FormHeading label="New book details"/> <mx:FormItem label="ISBN:" width=" 100%"> <mx:TextInput id="isbnInput" width="100%" text="1590596196" change="validateForm();" /> </mx:FormItem> <mx:FormItem label="Title:" width="100%"> <mx:TextInput id="titleInput" width="100%" text="Object Oriented Actionscript for Flash 8" change="validateForm();" /> </mx:FormItem> <mx:FormItem label="Author:" width="100%"> <mx:TextInput id="authorInput" width="100%" text="Peter Elst" change="validateForm();" /> </mx:FormItem> <mx:FormItem label="Amazon Url" width="100%"> <mx:TextInput id="amazonUrlInput" width="100%" text="http://tinyurl.com/qxon2" change="validateForm();" /> </mx:FormItem> </mx:Form> <mx:TextArea id="deb" width="100%"/> <mx:ControlBar> <mx:Button label="Add book" click="addBookHandler();" enabled="{formIsValid}" /> <mx:ComboBox id="addPosition" enabled="{formIsValid}"> <mx:String>before</mx:String> <mx:String>after</mx:String> </mx:ComboBox> <mx:ComboBox id="addRelativeTo" enabled="{formIsValid}" > <mx:String>selected item.</mx:String> <mx:String>the list.</mx:String> </mx:ComboBox> <mx:VRule height="15"/> <mx:Button label="Delete book" click="deleteBookHandler();" enabled="{selectionExists}" /> </mx:ControlBar> </mx:Panel> </mx:Application>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值