Пытаетесь использовать FlexGlobals для доступа к ArrayCollection? - PullRequest
0 голосов
/ 30 августа 2011

В настоящее время я пытаюсь использовать новый подход использования FlexGlobals для доступа к коллекции ArrayCollection, которую я имею в представлении по умолчанию для мобильного приложения, которое я разрабатываю. Ниже приведен код, который составляет создание и заполнение этого массива в представлении по умолчанию, которое происходит после запуска приложения:

private var ids:ArrayCollection = new ArrayCollection();

            private function loop():void
            {
                var index:int;
                for( index = 0; index < compsCollection.length; index++ )
                {
                    trace( "Element " + index + " is " + compsCollection[index].comp_id );
                    trace( ids.length);
                    ids.addItem(compsCollection[index].comp_id);                    
                }               
            }

Теперь, когда этот код запущен, я ясно вижу из консоли, что ArrayCollection «ids» заполняется правильно. Теперь в другом представлении приложения я хочу получить доступ к этим данным и использовать их для разных целей. Я использовал код ниже, чтобы попытаться получить доступ к данным для ArrayCollection:

protected var ids_list:ArrayCollection = new ArrayCollection();

protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void
            {               
                var obj:Object = FlexGlobals.topLevelApplication.parameters;    
                ids_list.source = obj.ids;              
                trace(ids_list.length);                  
            }

Когда я пытался это сделать, я не получаю сообщение об ошибке, однако оператор Trace возвращает «0». И я тоже попробовал:

protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void
            {               
                ids_list.source = FlexGlobals.topLevelApplication.parameters.ids;               
                trace(ids_list.length);                  
            }

Который снова вернул "0" в операторе трассировки. Я наконец попробовал это, чтобы видеть, будет ли это работать:

protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void
            {               
                ids_list.source = FlexGlobals.topLevelApplication.ids;              
                trace(ids_list.length);                  
            }

Когда я попробовал это и перешел к представлению, где этот код будет инициирован, я получил эту ошибку:

Error #1069: Property ids not found on Main and there is no default value.

Я мог только предположить, что ArrayCollection, который я создал в моем представлении по умолчанию, не имеет значения, когда я ухожу от него. Может ли кто-нибудь помочь мне с этим, так как, похоже, почти нет документации о том, как делать подобные вещи с FlexGlobals? Спасибо

Ответы [ 3 ]

1 голос
/ 30 августа 2011

Вы не можете получить доступ к частной собственности, попробуйте

/*
Replace

private var ids:ArrayCollection = new ArrayCollection();

by
*/

private var _ids:ArrayCollection = new ArrayCollection();
public set ids(value:ArrayCollection):void{
_ids = value;
}

public get ids():ArrayCollection{
return _ids 
}
0 голосов
/ 30 августа 2011

Передайте коллекцию ArrayCollection в качестве свойства вашему представлению из основного приложения.

0 голосов
/ 30 августа 2011

Дочерний компонент крайне плохо знает что-либо о структуре своего родителя / предка.При этом причина того, что вы не видите значения переменной-члена приложения, заключается в том, что вы сделали ее закрытой.Если вы хотите, чтобы он был виден за пределами своей области видимости, вы должны сделать его публичным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...