Flex中ItemPendingError背后的设计决策是什么?

时间:2009-07-29 11:10:31

标签: flex adobe

Flex有懒惰加载数据的概念。它有一个名为ItemPendingError的类,它允许开发人员在尝试访问尚未提供的数据(即“待处理”)时处理它。

然而,查看documentation很明显,您必须在代码中添加try / catch块,只要您有可能导致IPE(ItemPendingError)发生的代码。

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

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

3 个答案:

答案 0 :(得分:0)

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

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

我认为这更多的是评论而不是答案,但我希望它有所帮助。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

绑定在链中的任何地方处理null,因此GUI在最终目标对象被填充之前不会显示任何内容。

干杯