Гибкое прослушивание событий - PullRequest
0 голосов
/ 05 августа 2009

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

Моя структура каталогов следующая.

  • активы
  • компоненты
  • контроль
  • событие
  • модель
  • Util

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

model/ApplicationModel.as</p> <pre><code>[Bindable] public class ApplicationModel { //put specific model components here public var data:ArrayCollection; //the one instance in this Singleton private static var _instance:ApplicationModel; public function ApplicationModel() { if (_instance != null) throw new Error("ApplicationModel already exists!"); } public static function getInstance():ApplicationModel { if (_instance == null) _instance = new ApplicationModel(); return _instance; } }

компоненты / SearchBox.mxml

<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>
    <![CDATA[
        import com.homedepot.di.tp.SCVTools.events.*;

        private function doSearch():void
        {
            var query:String = searchTI.text;

            //only want to dispatch an event if there is something to query
            if (query) dispatchEvent(new CustomEvent(CustomEvent.UPDATE_START,query));
        }
    ]]>
</mx:Script>
    <mx:Label  text="Enter Search Term"/>
    <mx:TextInput id="searchTI" enter="doSearch()" />
    <mx:Button label="Search" click="doSearch()"/>
</mx:HBox>

Эта функция поиска работает нормально и выдаст нужные мне данные. Мне нужно знать, когда выполняется этот вызов веб-службы, чтобы компонент представления мог соответствующим образом обновить другие аспекты представления (скрыть столбцы таблицы данных на основе данных, возвращаемых в качестве примера).

Мой файл Application.mxml подключит мой контроллер для прослушивания CustomEvent. Затем контроллер будет делегировать работу для фактического вызова веб-службы и получения данных. Делегат создаст объект HTTPService и получит данные. Он также будет обрабатывать результаты HTTPService. В настоящее время я пытаюсь отправить новое событие в функцию, которая обрабатывает результат вызова HTTPService. Это не похоже на работу и имеет смысл, так как событие никогда не будет пузыриться для моего компонента просмотра.

snippet of control/DataUpdateDelegate.as</p> <pre><code> public override function parse(event:ResultEvent):void { super.parse(event); try { Application.debug("DataUpdateDelegate:parse"); var data:Object = event.result.records.record; model.data = data as ArrayCollection; dispatchEvent(new CustomEvent(CustomEevent.UPDATE_END) ); } catch (error:Error) { handleError(error); } }

Я пытался подключить это событие UPDATE_END к файлу Application.mxml, но, похоже, это тоже не работает.

Есть ли у кого-нибудь какие-либо предложения о том, как мой взгляд прослушивать это событие, которое не отправлено из дочернего компонента, а скорее из класса ActionScript, который ничего не знает о компоненте представления?

Спасибо

Thomas

1 Ответ

0 голосов
/ 05 августа 2009

Вы можете привязать определенную функцию к свойству data, используя BindingUtils , когда ваш ApplicationModel впервые установлен в вашем представлении:

public function set model(applicationModelInstance:ApplicationModel):void
{
    _applcationModelInstance = applicationModelInstance;
    BindingUtils.bindSetter(dataRefreshed, _applicationModelInstance, "data");
}

protected function dataRefreshed(value:Object):void
{
    // do whatever you need to do here. 
    // value==applicationModelInstance.data
}

Отмена регистрации привязки, подобной этой, чтобы избежать утечек памяти, немного сложна, но, так как ваш ApplicationModel является синглтоном, вам все равно не нужно.

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