Я хочу добавить живой поиск в список, чей поставщик данных - очень большой XML.для простоты, давайте предположим, что мой XML - это просто список 180 стран мира:
package
{
//Imports
import fl.controls.List;
import fl.data.DataProvider;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
//Class
public class LiveSearchXMLList extends Sprite
{
//Variables
private var XMLData:XML;
private var dp:DataProvider;
private var list:List;
//Constructor
public function LiveSearchXMLList()
{
addEventListener(Event.ADDED_TO_STAGE, init);
}
//Initialization
private function init(evt:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
//Download XML File
var XMLLoader:URLLoader = new URLLoader();
XMLLoader.addEventListener(IOErrorEvent.IO_ERROR, IOEventErrorHandler);
XMLLoader.addEventListener(Event.COMPLETE, XMLLoaderCompleteEventHandler);
XMLLoader.load(new URLRequest( /* COUNTRY_LIST_XML_FILE */ ));
}
//XMLLoader Error Handler
private function IOEventErrorHandler(evt:IOErrorEvent):void
{
//Remove Event Listeners
evt.target.removeEventListener(IOErrorEvent.IO_ERROR, IOEventErrorHandler);
evt.target.removeEventListener(Event.COMPLETE, XMLLoaderCompleteEventHandler);
//Throw Error
throw(evt.text);
}
//XMLLoader Complete Handler
private function XMLLoaderCompleteEventHandler(evt:Event):void
{
//Remove Event Listeners
evt.target.removeEventListener(IOErrorEvent.IO_ERROR, IOEventErrorHandler);
evt.target.removeEventListener(Event.COMPLETE, XMLLoaderCompleteEventHandler);
//Assign XMLData
XMLData = new XML(evt.target.data);
createList();
}
//List
private function createList():void
{
//Assign And Alphabetize Data
dp = new DataProvider(XMLData);
dp.sortOn("countryName");
//Create List Object
list = new List();
list.width = 400;
list.height = 400;
list.x = list.y = 25;
list.labelField = "countryName";
list.dataProvider = dp;
}
}
}
поля labelFields заполнены элементом XML <countryName>
и расположены в алфавитном порядке.
я бы хотелсоздать поле ввода текста, которое будет прослушивать нажатия клавиш, и обновлять список в соответствии со строкой ввода, соответствующей значениям элемента countryName.поэтому, если я введу «can» в текстовое поле, список внезапно уменьшится до 5 строк:
- Американское Самоа
- Канада
- Центрально-Африканская РеспубликаРеспублика
- Доминиканская Республика
- Ватикан
Конечно, поиск в режиме реального времени также не должен быть разрушительным - нажмите «Удалить» один раз, чтобы поле поиска теперь отображалось «ca», что увеличивает список из 5 строк до 21 строки.(Антарктида, Ямайка и т. Д.)
как это сделать?Какой самый быстрый или самый распространенный подход для оперативного поиска и обновления объекта списка, предоставленного в формате XML?