データプロバイダーが非常に大きな 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 行だけに減ります。
- アメリカ領サモア
- カナダ
- 中央アフリカ共和国
- ドミニカ共和国
- バチカン市
もちろん、ライブ検索も非破壊的である必要があります。削除を 1 回押すと、検索フィールドに "ca" と表示され、5 行のリストが 21 行に増えます。(南極、ジャマイカなど)
これはどのように行われますか?XML 提供のリスト オブジェクトをライブで検索および更新するための最速または最も一般的な方法は何ですか?