0

我有一个名为 EmployeeResult 的类,我从服务中获取响应。在结果处理程序中,我得到了一组员工,如姓名、身份证、年龄等。在employeeView.mxml 文件中有一个dataGrid。在employeeView.mxml 文件中,我有一个ArrayCollection,它是数据网格的数据提供者。我想从 EmployeeResult 文件中更新该数组集合。在使用 Cairngorm 框架时,我使用了单例中的 arraycollection 来实现目标。在 mate 框架的情况下,我使用了 propertyinjector 标签。但是在没有任何框架的情况下,我如何实现这个目标。如何在不使用框架或单例类的情况下实现属性注入。

4

2 回答 2

1

继续上一个问题:如何监听由父组件调度的子组件内部的事件,您可以简单地调度一个包含该员工列表的自定义事件,并通知整个应用程序它的到来。

像这样的东西:

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>

尽管这种方法具有非常容易实现的优点,但它也具有单例的所有缺点(例如,可测试性差)。

于 2012-10-16T16:03:08.007 回答
0

鉴于您一直在问的问题类型,您确实应该考虑使用诸如RobotlegsMate之类的框架。它们为您提供了将应用程序连接在一起的工具,而没有可怕的黑客攻击,这些黑客攻击会限制您的灵活性或长期使维护复杂化。

在此处查看我之前的答案,以获取在没有框架、Mate 和 Robotlegs 的情况下完成的同一个项目的链接。

于 2012-10-16T18:00:35.340 回答