2

我用(arA)填充数据网格。这个arraycollection 是一个httpService 的resultEvent。arraycollection 由于我的数据网格必须是最新的,我使用计时器来查询数据库并查看是否存在新记录。今天,每次查询时,我都会刷新数据网格。但是,这种定位不利于用户体验。

所以,我有了一个新想法,将更新httpservice的结果存储在一个新的arraycollection(ArB)中并比较两个arraycollection。但我不知道该怎么做。

可以,你帮助我或目的更好的解决方案。

谢谢

4

6 回答 6

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 服务将更精简,仅返回上次调用的增量。

于 2012-07-24T14:29:31.660 回答
0

我建议你可以通过以下方式做到这一点:

#1

每条记录都有自己的id,因此可以根据id字段比较本地arraycollection和远程arraycollection,然后将新记录添加到本地arraycollection。

#2

在服务器中添加新的 api 以支持带 id 的分页。

例如:

getRecord(fromid,-1)将记录从“from id”返回到最新记录。getRecord(fromid,toid)将返回记录 from 和 to。

于 2012-07-24T07:31:50.303 回答
0

我会提出这个建议:

  • 使用数组作为缓冲区。

  • 将缓冲区大小设置为合理的大小。说 10 条记录。

  • 每当缓冲区已满或您指定的瞬间填充网格 - 以之前的为准。

于 2012-07-24T04:56:58.610 回答
0

在我看来,你可以尝试这样的方法:

1- 存储在数据库中的数据将具有字段 updateDate,这是该字段的最新更新时间。

2-每次查询新/更新/删除项目,只需加载更新项目。(使用这种方法,已删除的项目不会真正从系统中删除,只需将其标志更新为已删除)。

3-比较更新数组与当前数组时,您只需比较当前数组中对象的ID与更新数组中对象的ID,并相应地更新它。

这种方法类似于上面 www.Flextras.com 的评论。

于 2012-07-24T03:06:00.100 回答
0

我会考虑在带有时间戳的响应中有一个 last_modify 字段,因此您可以检查响应的长度,即响应的 last_modify 字段是否大于之前的 last_modify 是因为数据发生了变化,但您需要后端的帮助才能进行此更改

于 2012-07-24T17:52:54.163 回答
-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");
} 
于 2012-07-24T13:57:53.187 回答