У меня есть приложение, в котором пользователь вводит необходимую информацию в текстовые поля во всплывающем окне заголовка и отправляет данные, введенные в сетку данных. Это первый раз, когда я вызываю всплывающее окно и вводить информацию, она работает нормально. Вот проблема: в следующий раз, когда я вызываю компонент во всплывающем окне и щелкаю в любом месте всплывающего окна, включая textInputs, первый элемент массива автоматически вводится в textInput, где пользователь должен сам вводить данные (кстати, это textInput также является компонентом автозаполнения). То, что я хочу, - нечего вводить в текстовый ввод, пока пользователь не введет сами данные. Я настраивался с этим в течение многих часов, и я озадачен. Любые предложения будут высоко оценены.
Вот код:
(это главная страница)
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="init()" >
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
import mx.collections.ArrayCollection;
import mx.core.IFlexDisplayObject;
import com.AddTrade;
[Bindable]public var dgItems:ArrayCollection = new ArrayCollection();
private var addTradeScreen:AddTrade;
private function init():void
{
addTradeScreen = new AddTrade();
addTradeScreen.addEventListener("SaveTrade", saveTrade);
}
private function addTrade():void
{
PopUpManager.addPopUp(addTradeScreen, this, true);
PopUpManager.centerPopUp(addTradeScreen);
addTradeScreen.country.text = "";
addTradeScreen.Notes.text ="";
addTradeScreen.myDate.text="";
}
private function saveTrade(e:Event):void
{
var trade:Trade= new Trade();
trade.country = addTradeScreen.country.text;
trade.myDate = addTradeScreen.myDate.text;
trade.direction = addTradeScreen.combo.text;
dgItems.addItem(trade);
PopUpManager.removePopUp(addTradeScreen);
}
public function deleteItem(event:MouseEvent):void
{
dgItems.removeItemAt(myDG.selectedIndex);
dgItems.refresh();
}
public function myColStyleFunc(data:Object,col:AdvancedDataGridColumn):Object
{
if(data["myProfit"]<0)
{
return {color:0xFF0000};
}
else
{
return null;
}
}
]]>
</mx:Script>
<mx:AdvancedDataGrid x="10" y="10" dataProvider="{dgItems}" id="myDG" variableRowHeight="true" wordWrap="true" tabIndex="12" editable="false" height="429" width="942" doubleClickEnabled="true">
<mx:columns>
<mx:AdvancedDataGridColumn width="120" headerText="Country:" dataField="country"/>
<mx:AdvancedDataGridColumn width="120" headerText="Date:" dataField="myDate"/>
<mx:AdvancedDataGridColumn width="160" headerText="Notes:" dataField="tradeNotes"/>
<mx:AdvancedDataGridColumn width="129" headerText="Delete" >
<mx:itemRenderer>
<mx:Component id="deleteButton" >
<mx:Image click="outerDocument.deleteItem(event)" buttonMode="true" source="@Embed(source='Assets/trash2.png')" scaleContent="false" verticalAlign="middle" horizontalAlign="center" width="30" height="30"/>
</mx:Component>
</mx:itemRenderer>
</mx:AdvancedDataGridColumn>
</mx:columns>
</mx:AdvancedDataGrid>
<mx:Button x="733" y="447" click="addTrade();" label="Add New Trade" height="36" width="219" fontSize="14"/>
Вот всплывающий код компонента:
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" width="422" height="294"
title="Log Ur Trade" showCloseButton="true" close="close(event)"
xmlns:comp="com.adobe.flex.extras.controls.*"
initialize="data1 = new ArrayCollection(countries);
data2 = new ArrayCollection(countries);">
<mx:Metadata>
[Event(name="SaveTrade")]
</mx:Metadata>
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
import mx.events.CloseEvent;
import mx.events.FlexEvent;
import mx.collections.ArrayCollection;
[Bindable] private var data1: ArrayCollection;
[Bindable] private var data2: ArrayCollection;
[Bindable]
public var countries: Array = [
{id: 0, name:"Monaco"},
{id: 1, name:"Macau"},
{id: 2, name:"Hong Kong"},
{id: 3, name:"Singapore"},
{id: 4, name:"Gibraltar"},
{id: 5, name:"Vatican City"},
{id: 6, name:"Malta"},
{id: 7, name:"Bermuda"},
{id: 8, name:"Maldives"},
{id: 9, name:"Bahrain"},
{id: 10, name:"Bangladesh"},
{id: 11, name:"Channel Islands"},
{id: 12, name:"Nauru"},
{id: 13, name:"Taiwan"},
{id: 14, name:"Barbados"},
{id: 15, name:"Palestinian territories"},
{id: 16, name:"Mauritius"},
{id: 17, name:"Aruba"},
{id: 18, name:"South Korea"},
{id: 19, name:"San Marino"},
{id: 20, name:"Puerto Rico"},
{id: 21, name:"Tuvalu"},
{id: 22, name:"Netherlands"},
{id: 23, name:"Martinique"},
{id: 24, name:"Comoros"},
{id: 25, name:"Lebanon"},
{id: 26, name:"Rwanda"},
{id: 27, name:"Marshall Islands"},
{id: 28, name:"Belgium"},
{id: 29, name:"Japan"},
{id: 30, name:"India"},
{id: 31, name:"El Salvador"},
{id: 32, name:"American Samoa"},
{id: 33, name:"U.S. Virgin Islands"},
{id: 34, name:"Sri Lanka"},
{id: 35, name:"R union"},
{id: 36, name:"Guam"},
{id: 37, name:"Haiti"},
{id: 38, name:"Saint Vincent and the Grenadines"},
{id: 39, name:"Israel"},
{id: 40, name:"Saint Lucia"},
{id: 41, name:"Philippines"},
{id: 42, name:"Burundi"},
{id: 43, name:"Guadeloupe"},
{id: 44, name:"Grenada"},
{id: 45, name:"Trinidad and Tobago"},
{id: 46, name:"Vietnam"},
{id: 47, name:"United Kingdom"},
{id: 48, name:"Jamaica"},
{id: 49, name:"Germany"},
{id: 50, name:"Netherlands Antilles"},
{id: 51, name:"Liechtenstein"},
{id: 52, name:"Pakistan"},
{id: 53, name:"Italy"},
{id: 54, name:"North Korea"},
{id: 55, name:"Nepal"},
{id: 56, name:"Antigua and Barbuda"},
{id: 57, name:"Dominican Republic"},
{id: 58, name:"Luxembourg"},
{id: 59, name:"Seychelles"},
{id: 60, name:"Switzerland"},
{id: 61, name:"Northern Mariana Islands"},
{id: 62, name:"Cayman Islands"},
{id: 63, name:"Saint Kitts and Nevis"},
{id: 64, name:"Sao Tome and Principe"},
{id: 65, name:"Federated States of Micronesia"},
{id: 66, name:"Kuwait"},
{id: 67, name:"British Virgin Islands"},
{id: 68, name:"Andorra"},
{id: 69, name:"Nigeria"},
{id: 70, name:"People's Republic of China"},
{id: 71, name:"Tonga"},
{id: 72, name:"Kiribati"},
{id: 73, name:"The Gambia"},
{id: 74, name:"Anguilla"},
{id: 75, name:"Isle of Man"},
{id: 76, name:"Czech Republic"},
{id: 77, name:"Denmark"},
{id: 78, name:"Cape Verde"},
{id: 79, name:"Thailand"},
{id: 80, name:"Moldova"},
{id: 81, name:"Uganda"},
{id: 82, name:"Poland"},
{id: 83, name:"Indonesia"},
{id: 84, name:"Guatemala"},
{id: 85, name:"Tokelau"},
{id: 86, name:"Portugal"},
{id: 87, name:"Slovakia"},
{id: 88, name:"France (Metropolitan)"},
{id: 89, name:"Albania"},
{id: 90, name:"Malawi"},
{id: 91, name:"Hungary"},
{id: 92, name:"Togo"},
{id: 93, name:"Serbia"},
{id: 94, name:"Dominica"},
{id: 95, name:"Syria"},
{id: 96, name:"Cuba"},
{id: 97, name:"Armenia"},
{id: 98, name:"Austria"},
{id: 99, name:"Azerbaijan"},
{id: 100, name:"Slovenia"},
{id: 101, name:"Turkey"},
{id: 102, name:"Ghana"},
{id: 103, name:"Romania"},
{id: 104, name:"Cyprus"},
{id: 105, name:"Spain"},
{id: 106, name:"Costa Rica"},
{id: 107, name:"Greece"},
{id: 108, name:"Croatia"},
{id: 109, name:"Republic of Macedonia"},
{id: 110, name:"Cambodia"},
{id: 111, name:"Wallis and Futuna"},
{id: 112, name:"Sierra Leone"},
{id: 113, name:"Ukraine"},
{id: 114, name:"Malaysia"},
{id: 115, name:"Bosnia and Herzegovina"},
{id: 116, name:"Cook Islands"},
{id: 117, name:"Benin"},
{id: 118, name:"Myanmar"},
{id: 119, name:"Egypt"},
{id: 120, name:"Qatar"},
{id: 121, name:"Morocco"},
{id: 122, name:"Ethiopia"},
{id: 123, name:"Bulgaria"},
{id: 124, name:"Iraq"},
{id: 125, name:"Samoa"},
{id: 126, name:"Brunei"},
{id: 127, name:"Honduras"},
{id: 128, name:"Georgia"},
{id: 129, name:"French Polynesia"},
{id: 130, name:"Jordan"},
{id: 131, name:"East Timor"},
{id: 132, name:"Tunisia"},
{id: 133, name:"Turks and Caicos Islands"},
{id: 134, name:"Swaziland"},
{id: 135, name:"Uzbekistan"},
{id: 136, name:"Senegal"},
{id: 137, name:"Lesotho"},
{id: 138, name:"Ireland"},
{id: 139, name:"Kenya"},
{id: 140, name:"te d'Ivoire"},
{id: 141, name:"Mexico"},
{id: 142, name:"United Arab Emirates"},
{id: 143, name:"Lithuania"},
{id: 144, name:"Burkina Faso"},
{id: 145, name:"Belarus"},
{id: 146, name:"Ecuador"},
{id: 147, name:"Fiji"},
{id: 148, name:"Bhutan"},
{id: 149, name:"Afghanistan"},
{id: 150, name:"Tajikistan"},
{id: 151, name:"Montenegro"},
{id: 152, name:"Montserrat"},
{id: 153, name:"Guinea-Bissau"},
{id: 154, name:"Palau"},
{id: 155, name:"Panama"},
{id: 156, name:"Nicaragua"},
{id: 157, name:"Iran"},
{id: 158, name:"Tanzania"},
{id: 159, name:"Saint Helena"},
{id: 160, name:"Colombia"},
{id: 161, name:"Yemen"},
{id: 162, name:"South Africa"},
{id: 163, name:"Guinea"},
{id: 164, name:"Eritrea"},
{id: 165, name:"Latvia"},
{id: 166, name:"Cameroon"},
{id: 167, name:"Djibouti"},
{id: 168, name:"Faroe Islands"},
{id: 169, name:"Zimbabwe"},
{id: 170, name:"Madagascar"},
{id: 171, name:"United States"},
{id: 172, name:"Estonia"},
{id: 173, name:"Liberia"},
{id: 174, name:"Venezuela"},
{id: 175, name:"Kyrgyzstan"},
{id: 176, name:"Laos"},
{id: 177, name:"Mozambique"},
{id: 178, name:"Democratic Republic of the Congo"},
{id: 179, name:"Saint-Pierre and Miquelon"},
{id: 180, name:"The Bahamas"},
{id: 181, name:"Brazil"},
{id: 182, name:"Peru"},
{id: 183, name:"Chile"},
{id: 184, name:"Sweden"},
{id: 185, name:"Uruguay"},
{id: 186, name:"Equatorial Guinea"},
{id: 187, name:"Vanuatu"},
{id: 188, name:"Solomon Islands"},
{id: 189, name:"Finland"},
{id: 190, name:"Zambia"},
{id: 191, name:"Paraguay"},
{id: 192, name:"New Zealand"},
{id: 193, name:"Sudan"},
{id: 194, name:"Argentina"},
{id: 195, name:"Algeria"},
{id: 196, name:"Pitcairn Islands"},
{id: 197, name:"Somalia"},
{id: 198, name:"Angola"},
{id: 199, name:"New Caledonia"},
{id: 200, name:"Papua New Guinea"},
{id: 201, name:"Norway"},
{id: 202, name:"Belize"},
{id: 203, name:"Republic of the Congo"},
{id: 204, name:"Saudi Arabia"},
{id: 205, name:"Niger"},
{id: 206, name:"Mali"},
{id: 207, name:"Turkmenistan"},
{id: 208, name:"Russia"},
{id: 209, name:"Bolivia"},
{id: 210, name:"Oman"},
{id: 211, name:"Chad"},
{id: 212, name:"Central African Republic"},
{id: 213, name:"Niue"},
{id: 214, name:"Kazakhstan"},
{id: 215, name:"Gabon"},
{id: 216, name:"Guyana"},
{id: 217, name:"Libya"},
{id: 218, name:"Canada"},
{id: 219, name:"Botswana"},
{id: 220, name:"Mauritania"},
{id: 221, name:"Iceland"},
{id: 222, name:"Suriname"},
{id: 223, name:"Australia"},
{id: 224, name:"Namibia"},
{id: 225, name:"French Guiana"},
{id: 226, name:"Mongolia"},
{id: 227, name:"Western Sahara"},
{id: 228, name:"Falkland Islands"},
{id: 229, name:"Greenland"}
];
private function save():void
{
this.dispatchEvent(new Event("SaveTrade"));
}
private function close(evt:CloseEvent):void
{
PopUpManager.removePopUp(this);
}
]]>
</mx:Script>
<mx:Button x="197" y="203" label="Submit" width="114" id="submitTrade" click="save()" tabIndex="11"/>
<mx:TextArea x="12" y="118" height="107" id="Notes" tabIndex="10" fontStyle="normal"/>
<mx:Label x="10" y="97" text="Notes:" fontWeight="bold" height="18" fontFamily="Georgia" fontSize="12"/>
<mx:DateField x="83" y="40" width="89" height="20" id="myDate" tabIndex="2"/>
<mx:Label x="10" y="42" text="Date:" fontWeight="bold" height="20" width="87" fontFamily="Georgia"/>
<comp:AutoCompleteModified
width="80"
dataProvider="{data2}"
labelField="name"
x="83" y="68" height="21" id="country" tabIndexChange="2" tabIndex="3"/>
<mx:Label x="10" y="70" text="Instrument:" width="75" fontWeight="bold" fontFamily="Georgia"/>
<mx:ComboBox id = "combo" x="83" y="10" width="89" rowCount="2" tabIndex="1">
<mx:ArrayCollection>
<mx:String>Long</mx:String>
<mx:String>Short</mx:String>
</mx:ArrayCollection>
</mx:ComboBox>
<mx:Label x="10" y="12" text="Direction:" width="65" fontWeight="bold" fontFamily="Georgia"/>
Наконец, код для компонента автозаполнения (AutocompleteModified):
<code>package com.adobe.flex.extras.controls
{
import flash.events.Event;
import flash.events.FocusEvent;
import flash.events.KeyboardEvent;
import flash.net.SharedObject;
import flash.ui.Keyboard;
import mx.collections.ListCollectionView;
import mx.controls.ComboBox;
import mx.core.UIComponent;
[Event(name="typedTextChange", type="flash.events.Event")]
public class AutoCompleteModified extends ComboBox
{
public function AutoCompleteModified()
{
super();
//Make ComboBox look like a normal text field
editable = true;
if(keepLocalHistory)
addEventListener("focusOut",focusOutHandler);
setStyle("arrowButtonWidth",0);
setStyle("fontWeight","normal");
setStyle("cornerRadius",0);
setStyle("paddingLeft",0);
setStyle("paddingRight",0);
rowCount = 7;
}
private var cursorPosition:Number=0;
private var prevIndex:Number = -1;
private var removeHighlight:Boolean = false;
private var showDropdown:Boolean=false;
private var showingDropdown:Boolean=false;
private var tempCollection:Object;
private var usingLocalHistory:Boolean=false;
private var dropdownClosed:Boolean=true;
//----------------------------------
// editable
//----------------------------------
/**
* @private
*/
override public function set editable(value:Boolean):void
{
//This is done to prevent user from resetting the value to false
super.editable = true;
}
/**
* @private
*/
override public function set dataProvider(value:Object):void
{
super.dataProvider = value;
if(!usingLocalHistory)
tempCollection = value;
}
//----------------------------------
// labelField
//----------------------------------
/**
* @private
*/
override public function set labelField(value:String):void
{
super.labelField = value;
invalidateProperties();
invalidateDisplayList();
}
//--------------------------------------------------------------------------
//
// Properties
//
//--------------------------------------------------------------------------
//----------------------------------
// filterFunction
//----------------------------------
/**
* @private
* Storage for the filterFunction property.
*/
private var _filterFunction:Function = defaultFilterFunction;
/**
* @private
*/
private var filterFunctionChanged:Boolean = true;
[Bindable("filterFunctionChange")]
[Inspectable(category="General")]
/**
* A function that is used to select items that match the
* function's criteria.
* A filterFunction is expected to have the following signature:
*
* <pre>f(item:~~, text:String):Boolean
*
* где возвращаемое значение
true
, если указанный элемент
* должен отображаться как предложение.
* При изменении текста в элементе управления автозаполнения это
* filterFunction запускается для каждого элемента в
dataProvider
.
*
*
Реализация по умолчанию для filterFunction работает следующим образом:
* Если был напечатан «AB», он отобразит все элементы, соответствующие
* "AB ~~" (ABaa, ABcc, abAc и т. Д.).
*
*
Пример использования настраиваемой функции filterFunction - при вводе текста
* является регулярным выражением, и мы хотим отобразить все
* предметы, которые входят в комплект.
*
* @пример
*
* public function myFilterFunction(item:~~, text:String):Boolean
* {
* public var regExp:RegExp = new RegExp(text,"");
* return regExp.test(item);
* }
*
*
* /
public function get filterFunction (): Функция
{
return _filterFunction;
}
/ **
* @частный
* /
public function set filterFunction (значение: Функция): пусто
{
// Пустая filterFunction разрешена, но не пустая filterFunction
если (значение! = NULL)
{
_filterFunction = значение;
filterFunctionChanged = true;
invalidateProperties ();
invalidateDisplayList ();
dispatchEvent (new Event ("filterFunctionChange"));
}
еще
_filterFunction = defaultFilterFunction;
}
// ----------------------------------
// filterFunction
// ----------------------------------
/ **
* @частный
* Хранение для свойства keepLocalHistory.
* /
private var _keepLocalHistory: Boolean = false;
/ **
* @частный
* /
частная переменная keepLocalHistoryChanged: Boolean = true;
[Bindable ( "keepLocalHistoryChange")]
[Осматриваемом (категория = "Общий")]
/ **
* Когда true, это заставляет элемент управления отслеживать
* записи, которые вводятся в элемент управления и сохраняет
* история как локальный общий объект. Когда это правда,
* завершение-функция и dataProvider игнорируются.
*
* @default "false"
* /
публичная функция get keepLocalHistory (): логическое значение
{
return _keepLocalHistory;
}
/ **
* @частный
* /
открытый набор функций keepLocalHistory (значение: Boolean): void
{
_keepLocalHistory = значение;
}
// ----------------------------------
// смотреть вперед
// ----------------------------------
/ **
* @частный
* Хранение для свойства lookAhead.
* /
private var _lookAhead: Boolean = false;
/ **
* @частный
* /
частный var lookAheadChanged: Boolean;
[Bindable ( "lookAheadChange")]
[Осматриваемом (категория = "Данные")]
/ **
* lookAhead решает, нужно ли автоматически завершать текст в текстовом поле
* с первым пунктом в выпадающем списке или нет.
*
* @default "false"
* /
публичная функция get lookAhead (): Boolean
{
return _lookAhead;
}
/ **
* @частный
* /
набор публичных функций
{
_lookAhead = значение;
lookAheadChanged = true;
}
// ----------------------------------
// typedText
// ----------------------------------
/ **
* @частный
* Хранение для свойства typedText.
* /
private var _typedText: String = "";
/ **
* @частный
* /
приватная переменная typedTextChanged: Boolean;
[Bindable ( "typedTextChange")]
[Осматриваемом (категория = "Данные")]
/ **
* Строка для отслеживания текста изменена как* результат взаимодействия с пользователем.
* /
публичная функция get typedText (): String
{
return _typedText;
}
/ **
* @частный
* /
открытый набор функций typedText (input: String): void
{
_typedText = input;
typedTextChanged = true;
invalidateProperties ();
invalidateDisplayList ();
dispatchEvent (new Event ("typedTextChange"));
}
переопределить защищенную функцию commitProperties (): void
{
super.commitProperties ();
если (! выпадающий)
SelectedIndex = -1;
если (раскрывающийся)
{
если (typedTextChanged)
{
cursorPosition = textInput.selectionBeginIndex;
updateDataProvider ();
// Если нет предложений, нет необходимости показывать выпадающий список
if (collection.length == 0 || typedText == "" || typedText == null)
{
dropdownClosed = TRUE;
showDropdown = ложь;
}
еще
{
showDropdown = true;
selectedIndex = 0;
}
}
}
}
переопределить защищенную функцию focusOutHandler (событие: FocusEvent): пусто
{
super.focusOutHandler (событие)
if (keepLocalHistory && dataProvider.length == 0)
addToLocalHistory ();
}
переопределить открытую функцию getStyle (styleProp: String): *
{
if (styleProp! = "openDuration")
return super.getStyle (styleProp);
еще
{
если (dropdownClosed)
return super.getStyle (styleProp);
еще
вернуть 0;
}
}
переопределить защищенную функцию keyDownHandler (событие: KeyboardEvent): пусто
{
super.keyDownHandler (событие);
если (! event.ctrlKey)
{
// UP "keydown" событие на самом верхнем элементе в раскрывающемся списке
// или событие ESCAPE "keydown" должно изменить текст в тексте
// поле к исходному тексту
if (event.keyCode == Keyboard.UP && prevIndex == 0)
{
textInput.text = _typedText;
textInput.setSelection (textInput.text.length, textInput.text.length);
selectedIndex = -1;
}
иначе if (event.keyCode == Keyboard.ESCAPE && ShowingDropdown)
{
textInput.text = _typedText;
textInput.setSelection (textInput.text.length, textInput.text.length);
показываяDropdown = false;
dropdownClosed = TRUE;
}
еще если (event.keyCode == Keyboard.ENTER)
{
if (keepLocalHistory && dataProvider.length == 0)
addToLocalHistory ();
/ *
textInput.text = selectedLabel;
textInput.setSelection (cursorPosition, textInput.text.length);
textInput.setSelection (textInput.text.length, _typedText.length);
* /
}
еще если (lookAhead && event.keyCode == Keyboard.BACKSPACE
|| event.keyCode == Keyboard.DELETE)
removeHighlight = true;
}
еще
if (event.ctrlKey && event.keyCode == Keyboard.UP)
dropdownClosed = TRUE;
prevIndex = selectedIndex;
}
измерение защищенной функции (): void
{
super.measure ();
measureWidth = mx.core.UIComponent.DEFAULT_MEASURED_WIDTH;
}
переопределить защищенную функцию updateDisplayList (unscaledWidth: Number,
unscaledHeight: Number): недействительный
{
super.updateDisplayList (unscaledWidth, unscaledHeight);
// UP "keydown" событие на самом верхнем элементе в выпадении
// вниз список изменяет текст в текстовом поле на ""
if (selectedIndex == -1)
textInput.text = typedText;
если (раскрывающийся)
{
если (typedTextChanged)
{
// Это необходимо, потому что вызов super.updateDisplayList () устанавливает текст
// в textInput to "" и, таким образом, значение
// набирается пользователем losts
if (lookAhead && showDropdown && typedText! = "" &&! removeHighlight)
{
var label: String = itemToLabel (collection [0]);
var index: Number = label.toLowerCase (). indexOf (_typedText.toLowerCase ());если (индекс == 0)
{
textInput.text = _typedText + label.substr (_typedText.length);
textInput.setSelection (textInput.text.length, _typedText.length);
}
еще
{
textInput.text = _typedText;
textInput.setSelection (cursorPosition, cursorPosition);
removeHighlight = false;
}
}
еще
{
textInput.text = _typedText;
textInput.setSelection (cursorPosition, cursorPosition);
removeHighlight = false;
}
typedTextChanged = false;
}
еще, если (typedText)
textInput.setSelection (_typedText.length, textInput.text.length);
}
if (showDropdown &&! dropdown.visible)
{
super.open ();
showDropdown = false;
показываяDropdown = true;
если (dropdownClosed)
dropdownClosed = ложь;
}
}
переопределить защищенную функцию textInput_changeHandler (событие: событие): пусто
{
super.textInput_changeHandler (событие);
// Сохраняет текст, введенный пользователем в переменную
typedText = текст;
}
приватная функция addToLocalHistory (): void
{
if (id! = null && id! = "" && text! = null && text! = "")
{
var so: SharedObject = SharedObject.getLocal ("AutoCompleteData");
var saveData: Array = so.data.suggestions;
// Пока не было создано ни одного общего объекта
если (сохраненные данные == ноль)
saveData = new Array ();
var i: Number = 0;
флаг var: Boolean = false;
// Проверяем, есть ли эта запись в ранее сохраненных данных общего объекта
для (я = 0; я
}
}