2009-07-29 50 views
3

Flex有延遲加載數據的概念。它有一個名爲ItemPendingError的類,它允許開發人員在嘗試訪問尚未提供的數據(即「pending」)時處理它。Flex中ItemPendingError背後的設計決定是什麼?

然而,看着documentation很明顯,你必須圍繞添加代碼try/catch塊,無論你有一些代碼可能導致IPE(ItemPendingError的)發生。

我很好奇,如果有人知道它爲什麼這樣工作。我不確定最好的解決方案可能是什麼,但必須在try/catch塊中添加錯誤來捕獲錯誤,然後註冊一個響應者,感覺不好,不太乾淨。事實上,你必須運用你的應用程序,以確保你抓住了所有可能發生錯誤的地方也是跛腳。

有沒有其他方法或更好的方法,我沒有見過/聽說過?

回答

0

乍一看,你是對的。這種方法「感覺」不好。問題是,有大量的數據,你想隨機訪問它,但你不想加載它。您有兩種選擇,等待所有數據先加載或等待數據在需要時加載。 Flex使用後一種方法。

所以,真的,我想你總是假設數據不會在那裏,你必須相應地處理。避免try/catch塊的唯一方法就是在嘗試訪問它之前始終檢查該項是否已加載(如果不是,則等待,如果不加載它)。也許Flex的創建者覺得如果你認爲數據總是可用並且只是在錯誤的情況下處理錯誤,那麼編碼更容易。

我想這是比回答更多的評論,但我希望它有幫助。

+0

是啊,我傾向於同意你的觀點說,「只是處理錯誤,如果它是不是」 ...這是我的猜測,爲什麼它的工作原理是它的方式。 – codecraig 2009-09-09 10:32:50

+0

第3種方法如何:「流式傳輸」數據,例如接收100個第一項顯示內容(用戶高興地看到內容),然後在後臺加載900項內容(就像YouTube上的流媒體視頻一樣)?我需要這樣的東西,但看到無處討論.. – 2012-10-05 20:38:22

0

我認爲這是一種語言限制和客戶端 - 服務器關係實現的性質。 「持久性」是僞造的,並且由於該語言的異步性質,ItemPendingError讓組件知道對象/集合被取回,並且它不需要向服務器詢問它(這會導致明顯的問題)。像List和DataGrid這樣的組件是爲了處理錯誤而構建的,因此它們不會帶來太大的問題,一旦以這種方式抽象出來,它就不是那麼痛苦。

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

0

一個有趣的方面有約束力的是,你可以要求異步的東西,讓綁定刷新界面時,它顯示出來。

例如,您有一個項目列表,其中每個項目都具有鏈接到綁定到顯示的對象的屬性。當用戶移動到新項目時,這些屬性的訪問者會對服務器進行異步調用,因爲它正在等待第一個請求。從服務器返回時,服務器的響應將被放入該屬性中(並觸發綁定事件)。

該綁定處理鏈中任何位置的空值,因此直到最終目標對象被填充後,GUI才顯示任何內容。

乾杯