Для цикла, не увеличивающегося последовательно в Flash Builder 4.5 - PullRequest
0 голосов
/ 10 февраля 2012

Следующая функция предназначена для создания нескольких массивов студенческой информации. Массив 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);  
    }   
}

1 Ответ

0 голосов
/ 11 февраля 2012

Я немного изменил то, как это работает, я думаю, что это будет более чистое решение, использующее свойство filterFunction.

...