Flex, проходящий через объект - PullRequest
2 голосов
/ 28 января 2010

Я пытаюсь расширить flex ArrayCollection, чтобы иметь возможность искать объект, содержащий определенные данные, и возвращать его.

Вот моя функция:

public function getItemContaining(value: String): Object {                      
          //Loop through the collection         
          for each(var i: Object in this) {                             
            //Loop through fields                               
            for(var j: String in i) {                   
                //If field value is equal to input value
                if(i[j] == value) {
                    return i;

                }
            }
        }
    //If not found
    return null;
    }

Проблема в том, что j всегда равно нулю, поэтому второй цикл никогда не работает. Поэтому я читаю описания гибких циклов, и на самом деле все должно работать нормально. В чем может быть проблема?

Ответы [ 3 ]

2 голосов
/ 28 января 2010

Попробуй так:

for (var name:String in myObject){
  trace(name + ":" + myObject[name];
}

Хорошо, это было на самом деле то же самое, что и вы Ошибка должна быть в этой строке:

for each(var i: Object in this) {

Попробуйте использовать это:

for each(var i: Object in this.source) {
0 голосов
/ 28 января 2010

если вы используете ArrayCollection в качестве источника данных, вам следует рассмотреть использование интерфейса IViewCursor. Вы можете предоставить пользовательскую функцию сравнения или указать поля для сравнения. Этот интерфейс хорошо документирован с примерами в Adobe / Liveocs

var _cursor:IViewCursor;
var _idSortField:SortField;
var _idSort:Sort = new Sort();
_idSortField = new SortField();
_idSortField.compareFunction = this.myCompareFunction; 
_idSort.fields = [_idSortField];
myArrayCollection.sort = _idSort;
myArrayCollection.refresh();
_cursor = myArrayCollection.createCursor();
if (_cursor.findAny(search))
   return _cursor;

если вы ищете значение в определенном свойстве, тогда это еще проще. Вот ссылка на Adobe Liveocs по этой теме

0 голосов
/ 28 января 2010

Моим первым инстинктом было бы взглянуть на тип данных. Вы настраиваете цикл, объявляющий j:String, и симптомом является то, что j всегда равно нулю. Это говорит о том, что Flex не может интерпретировать элементы i как строки. Если Flex распознает только элементы i как объекты (поскольку все строки являются объектами, а объекты - наименьшим общим знаменателем), он вернет ноль для j:String.

Попробуйте это для своего внутреннего цикла:

for(var j: Object in i) {                   
    //If field value is equal to input value
    if(i[j] is String && (i[j] as String) == value) {
        return i;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...