Я довольно новичок в гибкости и пытаюсь понять, как прослушать созданное мной событие. Позвольте мне сначала немного рассказать о моем приложении.
Моя структура каталогов следующая.
- активы
- компоненты
- контроль
- событие
- модель
- 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