2012-07-23 159 views
2

我使用(arA)填充數據網格。 這個arraycollection是一個httpService的resultEvent。 arraycollection 由於我的數據網格必須是最新的,我使用計時器來查詢數據庫並查看是否存在新記錄。 今天,每次我執行查詢時,我都會刷新數據網格。 但是,這種方向對用戶體驗不利。如何比較兩個arraycollection

因此,我有一個新的想法,將更新httpservice的結果存儲在新的arraycollection(ArB)中,並比較兩個arraycollection。但我不知道該怎麼做。

可以,你幫我或目的更好的解決方案。

感謝

+0

您是否正在尋找新項目或已刪除的項目或其他項目?您必須編寫自己的算法來比較數據集。您也可以考慮創建一個僅返回更新的新遠程調用。 – JeffryHouser 2012-07-23 23:03:37

+0

它更好地比較和使用數組而不是arrayCollection,可以使用Array()的source屬性獲取基本數組,並更新dataGrid dataprovider的source屬性。 – Imran 2012-07-24 04:18:26

回答

2

使用Flex,你可能想嘗試mx.utils.ObjectUtil進行比較。

public function compare(arrayCollection1:ArrayCollection, arrayCollection2:ArrayCollection):Boolean 
{ 
    if (arrayCollection1.length != arrayCollection2.length) 
     return false; 

    for (var i:uint = 0; i < arrayCollection1.length; i++) 
    { 
     if (ObjectUtil.compare(arrayCollection1[i], arrayCollection2[i]) != 0) 
      return false; 
    } 

    return true; 
} 

這是計算密集型;因此,您可能需要考慮在上次收到數據時將方法更改爲包含時間戳或索引。在您的Web服務中,該時間戳可以作爲參數傳遞。然後,您的Web服務將更加精簡,只會返回最後一次調用的增量。

0

在我看來,你可以嘗試的方法是這樣的:

1存儲在數據庫將有場updateDate數據,這是該領域的最新更新時間。

2-每次查詢新/更新/刪除項目,只需加載更新項目。 (使用這種方法,刪除的項目不會真正從系統中刪除,只需將其標誌更新爲刪除即可)。

3-當比較更新的數組和當前數組時,您只需比較當前數組中的對象的id與更新數組中的對象的id,並相應地更新它。

這種方法類似於上面的www.Flextras.com的評論。

0

我會提出這樣的:

  • 使用數組來充當緩衝器。

  • 將緩衝區大小設置爲合理的大小。說10條記錄。

  • 每當緩衝區已滿或在您指定的時刻填充網格 - 無論以前是誰。

0

我建議你可以通過以下方式做到這一點:

#1

每條記錄​​都有自己的ID,這樣你就可以康普艾上的ID當地的ArrayCollection和遠程的ArrayCollection基地字段,然後將新記錄添加到本地數組集合中。

#2

在服務器添加新的API來支持ID分頁。

例如:

getRecord(fromid,-1)將返回從記錄「從ID」的最新紀錄。 getRecord(fromid,toid)將返回來自和去往的記錄。

-1

如果有相同長度的兩個數組集合:

public function foo(coll1:ArrayCollection, coll2:ArrayCollection):void 
{ 
    if (coll1.length == coll2.length) 
    { 
     for (var i:int = 0; i < coll1.length; i++) 
     { 
      if (coll1[i].first != coll2[i].first || coll1[i].last != coll2[i].last) 
      { 
       Alert.show("Different"); 
       return; 
      } 
     } 
    } 

    Alert.show("Same"); 
} 
+0

它不可能是一個解決方案。 coll1 [i]是集合中的一個項目,其類型爲Object。默認情況下沒有第一個和最後一個屬性。這就是爲什麼表達式coll1 [i] .first首先給出「未定義」的結果。讓我知道如果我錯了。 – Anton 2013-02-01 07:54:05

0

我會考慮在帶有時間戳的響應中使用last_modify字段,因此您可以檢查響應的長度,即響應的last_modify字段是否大於前一個last_modify是因爲有更改數據,但是您需要後端的一些幫助來允許此更改