【问题标题】:What was the design decision behind ItemPendingError in Flex?Flex 中 ItemPendingError 背后的设计决策是什么?
【发布时间】:2009-07-29 11:10:30
【问题描述】:

Flex 具有延迟加载数据的概念。它有一个名为 ItemPendingError 的类,允许开发人员在尝试访问尚不可用的数据(即“待处理”)时对其进行处理。

但是,查看 documentation 很明显,您必须在代码周围添加 try/catch 块,只要您有代码可能会导致 IPE (ItemPendingError) 发生。

我很好奇是否有人知道它为什么会这样工作。我不确定最好的解决方案可能是什么,但是不得不随意添加 try/catch 块来捕获错误,然后用它注册一个 Responder 感觉很糟糕而且不是很干净。而且,您必须运行您的应用程序以确保您已经捕捉到所有可能发生错误的地方,这一事实也是蹩脚的。

还有其他我没见过/听说过的方法或更好的方法吗?

【问题讨论】:

    标签: apache-flex adobe


    【解决方案1】:

    乍一看,你是对的。这种方法“感觉”很蹩脚。问题是,有大量数据,您想随机访问它,但又不想加载它。您有两个选择,等待所有数据预先加载或等待数据在您需要时加载。 Flex 使用后一种方法。

    所以说真的,我猜你总是假设数据不存在,你必须相应地处理它。避免出现 try / catch 块的唯一方法似乎是在尝试访问它之前始终检查项目是否已加载(如果未加载,则在加载时等待)。也许 Flex 的创建者觉得如果您假设数据始终可用并且如果不可用就处理错误,那么编写代码会更容易?

    我想这更像是一个评论而不是一个答案,但我希望它有所帮助。

    【讨论】:

    • 是的,我倾向于同意您的观点,即“如果不是,就处理错误”......这就是我对它为什么会这样工作的猜测。
    • 第三种方法怎么样:“流式传输”数据,例如接收 100 个要显示的第一个项目(用户很高兴看到某些内容),然后在后台加载 900 个项目(就像 youtube 上的流式视频一样)?我需要这样的东西,但无处可讨论..
    【解决方案2】:

    我认为这是语言限制和客户端-服务器关系实现的本质。 “持久性”是伪造的,并且由于语言的异步特性,ItemPendingError 让组件知道对象/集合 正在 被获取,并且不需要一直向服务器询问它(这会导致明显的问题)。像 List 和 DataGrid 这样的组件是为处理错误而构建的,因此它们不会带来太大的问题,并且一旦您以这种方式将其抽象出来,就不会那么痛苦了。

    This is an interesting approach to abstracting this issue...

    【讨论】:

    • 感谢您的链接,乔尔。在 Adob​​e 的 LiveCycle 产品之外,您(或其他任何人)是否发现了此概念的任何成熟实施?我对增强型 ArrayCollection 风格的方法特别感兴趣,它可以处理按需获取、分页和将任何排序结构传递给服务器以提高效率的细节。
    【解决方案3】:

    绑定的一个有趣方面是您可以异步请求某些内容,并让绑定在其出现时刷新 GUI。

    例如,您有一个项目列表,其中每个项目都具有链接到绑定到显示器的对象的属性。当用户移动到新项目时,这些属性的访问器会对服务器进行异步调用,因为它正在等待第一个请求。来自服务器的响应在从服务器返回时被放入该属性中(并触发绑定事件)。

    绑定处理链中任意位置的 null,因此 GUI 不会显示任何内容,直到最终目标对象被填充。

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2011-03-04
      • 2021-12-03
      • 2012-06-30
      • 2019-01-24
      相关资源
      最近更新 更多