Следующая функция предназначена для создания нескольких массивов студенческой информации. Массив studentList отображается в поле со списком «All, A, B, C, D и т. Д.». ComboBox настроен для вызова этой функции при изменении. Значение по умолчанию selectedIndex для comboBox равно нулю, поэтому при начальном отображении для него установлено значение «Все», и все учащиеся отображаются в списке.
Пользователь выбирает «B» в поле со списком, и в списке отображаются только ученики с фамилиями, которые начинаются с B. Затем пользователь выбирает «Z», и в списке отображаются только студенты Z. Отлично, пока.
Если теперь пользователь выбирает «Все», список становится пустым. Снова выбрав «А», мы получим студентов. Выберите «Все», мы ничего не получим.
Я положил туда "счетчик посещений", чтобы лучше объяснить, что происходит.
В начальном отображении счетчик посещений отображает 600, а размер набора студентовВсего отображает 600, что соответствует общему количеству учащихся в списке.
Когда буква выбрана, счетчик совпадений правильно отображает число учеников, находящихся сейчас в списке, и размер учеников остается равным 600.
Однако при повторном выборе «Все» счетчик обращений становится равным 1, и список пуст. СтудентыВсе размеры остаются на 600.
Что здесь не так. Я не вижу приращения _index, как следует, но только при выборе «Все». Это как если бы значение studentAll.Length возвращает 1 вместо 600. Но я проверил, и оно правильно возвращает 600.
«Все» работает один раз, но никогда больше. Пока метод продолжает работать нормально каждый раз при фильтрации письма.
TIA за любую помощь.
John
private function filterStudents(): void {
studentsList.removeAll();
studentsIDs.removeAll();
studentsEmailpws.removeAll();
studentspws.removeAll();
var _studentNameFirstLetter:String;
var _filterLetter:String = alphaFilterCombo.text;
var _i:int=0;
var _doAll:Boolean = alphaFilterCombo.selectedIndex == 0;
var _doIt:Boolean = true;
//note:studentsAll is an xmlCollection of all the students filled on startup
for (var _index:int=0; _index < studentsAll.length; _index++) {
if (!_doAll) {
_studentNameFirstLetter = studentsAll[_index].name;
_studentNameFirstLetter = _studentNameFirstLetter.substring(0,1);
_doIt = (_studentNameFirstLetter == _filterLetter);
}
if (_doIt) {
_i ++;
formTitleLabel.text = "hit count = "+ _i.toString() + " studentsAll size = " + studentsAll.length.toString();
studentsList.addItemAt(studentsAll[_index].name, studentsList.length);
studentsIDs.addItemAt(studentsAll[_index].id, studentsIDs.length);
studentsEmailpws.addItemAt(studentsAll[_index].emailpw, studentsEmailpws.length);
studentspws.addItemAt(studentsAll[_index].pw, studentspws.length);
}
}
}
Приложение: код, использующий встроенную функцию фильтра ...
private function filterStudents(): void {
var filterFunctionToUse : Function;
studentsList.removeAll();
searchedChar = alphaFilterCombo.text;
filterFunctionToUse = studentLastNameFilter;
studentsAll.filterFunction = filterFunctionToUse;
studentsAll.refresh();
for (var _index:int=0; _index < studentsAll.length; _index++) {
studentsList.addItemAt(studentsAll[_index].name, studentsList.length);
}
}
private function studentLastNameFilter(value : Object) : Boolean{
return (value.name as String).charAt(0) == searchedChar;
}
Приложение 2: Ниже приведен метод результата HTTPService, который возвращает студентов в базу данных, которая заполняет студентовВсе ...
[Bindable] private var studentsAll:XMLListCollection = new XMLListCollection();
[Bindable] private var studentsList:XMLListCollection;
[Bindable] private var studentsIDs:XMLListCollection;
[Bindable] private var studentsEmailpws:XMLListCollection;
[Bindable] private var studentspws:XMLListCollection;
private function lookupStudentsSuccess(event:ResultEvent) : void {
var _studentsXML:XML = XML(event.result);
studentsAll = new XMLListCollection(_studentsXML.details);
studentsList = new XMLListCollection;
studentsIDs = new XMLListCollection;
studentsEmailpws = new XMLListCollection;
studentspws = new XMLListCollection;
for (var _index:int=0; _index < studentsAll.length; _index++) {
studentsList.addItemAt(studentsAll[_index].name, studentsList.length);
studentsIDs.addItemAt(studentsAll[_index].id, studentsIDs.length);
studentsEmailpws.addItemAt(studentsAll[_index].emailpw, studentsEmailpws.length);
studentspws.addItemAt(studentsAll[_index].pw, studentspws.length);
}
}