【问题标题】:Flex Components are not getting refreshedFlex 组件未刷新
【发布时间】:2012-05-17 06:21:00
【问题描述】:

您好,我们在 UI 方面的项目中使用了 Flex 4。在加载应用程序仪表板时,我们得到一组 pod。我们单击一个 pod,然后 pod 视图打开。此 pod 视图包含数据网格,其中第一列作为超链接。当您单击超链接时,会打开另一个屏幕,这是我们的模块屏幕。

此模块屏幕顶部有一个提交按钮和几个数据网格。现在我们使用 RemoteObject 在网格中加载数据。每个网格的父容器都是一个 WindowShade 组件。

现在我们的要求是用户可以在一个或两个网格中进行修改,然后单击提交。根据用户修改的网格,我想将相应的 Window shade 设置为只读。如果用户修改了两个网格,我需要将两个 Window Shade 组件设为只读并禁用 SUBMIT 按钮。 用户应该能够在单击提交时立即看到此更改,而无需关闭屏幕或离开屏幕。

当用户第一次打开屏幕时,我们会从后端获得一些状态,根据这些状态,我将 Window shades 设置为只读并启用/禁用按钮。当我点击提交时,我仍然点击后端并获取状态,但没有启用/禁用按钮或窗帘。

我已经在创建 swf 的 mxml 文件的 updateComplete 方法中编写了启用/禁用的逻辑。

updateComplete 在用户第一次打开屏幕时被调用。当用户点击提交时它不会被调用。为什么会这样?

我尝试使用 Loader 和 SWFLoader 来加载我的 SWF 文件,如下所示,但它也不起作用。 var request:URLRequest = new URLRequest("com/citi/risk/credit/maintenance/view/widgets/CRCMaintenanceModule.swf"); var loader:Loader = new Loader(); loader.load(request);

任何帮助或指点将不胜感激。

【问题讨论】:

    标签: flex4 flash refresh


    【解决方案1】:

    您可能需要考虑两件事:

    1) 简而言之,FlexEvent.UPDATE_COMPLETE 是一个被调度的事件,它本身已经完成渲染(经历了一个 Flex 组件生命周期)。这可能会发生一次或多次,具体取决于组件更改的频率以及需要重新渲染其状态。

    此事件的频率/时间将根据调度它的对象而有所不同。例如,正在调整大小的容器将多次分派。一个永不改变的标签可能只会改变一次。

    相反,您应该考虑添加一个“creationComplete”(FlexEvent.CREATION_COMPLETE) 事件侦听器。 “creationComplete”只发生一次,您可以将侦听器添加到包含提交按钮的任何对象。

    2) 当您单击提交时,您添加“updateComplete”侦听器的对象可能还没有改变到足以通过 Flex 的组件生命周期。所以没有事件被分派。

    为什么这不会发生的答案实际上取决于您将事件侦听器添加到哪个对象。

    您是否尝试过在提交按钮上使用“单击”处理程序,以便在单击按钮时禁用相应的元素?同样,“click”事件只会发生一次,不像“updateComplete”;)

    【讨论】:

    • 您好 Sunil,我在调试模式下运行了该应用程序,您所说的是正确的。我还发现,在我从远程对象获取数据之前,会调用主容器的更新完成。所以我在主容器的更新完成方法中进行的所有状态检查都是徒劳的。如何确保在调用更新完成之前从服务器获取数据?如果我能够在更新完成之前获取数据,我的问题就解决了。
    • 不要为此使用更新完成。也许你的视图应该有一个默认状态(禁用的东西),直到收到来自服务器调用的响应。然后启用一些东西,然后使用提交按钮单击处理程序再次禁用。
    • 再次重申:更新完成意味着对象的一个​​(可能是多个)渲染阶段已经完成。所以它不适合你正在做的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2023-03-11
    • 2022-01-12
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多