2012-07-23 124 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是因为有更改数据,但是您需要后端的一些帮助来允许此更改