我有一个名为EmployeeResult的类,我从服务中获取响应。在resulthandler里面,我得到了一系列的员工,比如姓名,身份,年龄等。我在employeeView.mxml文件中有一个dataGrid。在employeeView.mxml文件中,我有一个ArrayCollection,它是datagrid的数据提供者。我想从EmployeeResult文件中更新该arraycollection。在使用Cairngorm框架时,我使用了singleton中的arraycollection来实现目标。在配合框架的情况下,我使用了propertyinjector标签。但是,如果没有任何框架,我如何在我的案例中实现这一目标。如何在不使用框架或单一类的情况下实现属性注入。
答案 0 :(得分:1)
继续上一个问题:How to listen to events inside the child component dispatched by the parent component,您只需发送一个包含该员工列表的自定义事件,并通知整个应用程序它的到来。
这样的事情:
private function handleMyEmployeeResults(event:ResultEvent):void {
var employees:IList = EmployeeResult(event.result).employeeList;
dispatchEvent(new EmployeeEvent(EmployeeEvent.LIST_LOADED, employees, true));
}
由于这是一个服务结果处理程序,我们可以假设它的类实例不是视图,因此它不在显示列表中,这就是事件无法冒泡的原因。为解决这个问题,我们可以直接在stage
上发送活动。
FlexGlobals.topLevelApplication.stage.dispatchEvent(
new EmployeeEvent(EmployeeEvent.LIST_LOADED, employees)
);
您的应用程序中的任何视图现在都可以侦听此事件并相应地设置其属性:
//inside View1
stage.addEventListener(EmployeeEvent.LIST_LOADED, handleEmployeesLoaded);
private function handleEmployeesLoaded(event:EmployeeEvent):void {
myDataGrid.dataProvider = event.employees;
}
//inside View2
stage.addEventListener(EmployeeEvent.LIST_LOADED, handleEmployeesLoaded);
private function handleEmployeesLoaded(event:EmployeeEvent):void {
myOtherKindOfList.dataProvider = event.employees;
myFirstEmployeeLabel.text =
event.employees[0].firstname + event.employees[0].lastname;
}
另一种更直接的方法是使用Application
作为单身人士。在主应用程序上创建可绑定属性employeeList
。现在在结果进入时设置其值:
private function handleMyEmployeeResults(event:ResultEvent):void {
var employees:IList = EmployeeResult(event.result).employeeList;
FlexGlobals.topLevelApplication.employeeList = employees;
}
现在,您可以从应用程序的任何位置绑定到此属性。
<View1>
<s:DataGrid dataProvider="{FlexGlobals.topLevelApplication.employeeList}" />
</View1>
<View2>
<s:List dataProvider="{FlexGlobals.topLevelApplication.employeeList}" />
</View2>
虽然这种方法具有易于实现的优点,但它具有Singleton的所有缺点(例如,可测试性差)。
答案 1 :(得分:0)