我使用(arA)填充数据网格。 此arraycollection是httpService的resultEvent。 的ArrayCollection 由于我的datagrid必须是uptodate,我使用计时器来查询数据库并查看是否存在新记录。 今天,每次进行查询时,我都会刷新数据网格。 但是,这种方向对用户体验不利。
所以,我有一个新的想法,将更新httpservice的结果存储在一个新的arraycollection(ArB)中并比较两个arraycollection。但我不知道该怎么做。
可以,你帮助我或提供更好的解决方案。
由于
答案 0 :(得分: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服务将更精简,仅返回上次调用的增量。
答案 1 :(得分:0)
在我看来,你可以试试这样的方法:
1-存储在DB中的数据将具有字段updateDate,这是该字段的最新更新时间。
2-每次查询新/更新/删除项目时,只需加载更新项目。 (使用这种方法,删除的项目不会真正从系统中删除,只需将其标志更新为已删除)。
3-比较更新的数组与当前数组时,您只需要比较当前数组中对象的id与更新数组中对象的id,并相应地更新它。
这种方法与上述www.Flextras.com上的评论类似。
答案 2 :(得分:0)
我建议这样做:
使用Array作为缓冲区。
将缓冲区大小设置为合理的大小。说10条记录。
只要缓冲区已满或在您指定的时刻填充网格 - 以先到者为准。
答案 3 :(得分:0)
我建议你可以通过以下方式完成:
每个记录都有自己的id,因此你可以在id字段上比较本地arraycollection和远程arraycollection,然后将新记录添加到本地arraycollection。
在服务器中添加新的api以支持带有id的分页。
例如:
getRecord(fromid,-1)
会将记录从“从id”返回到最新记录。 getRecord(fromid,toid)
将从和返回记录。
答案 4 :(得分:0)
我会考虑在带有时间戳的响应中有一个last_modify字段,因此您可以检查响应的长度,即,响应的last_modify字段是否大于前一个last_modify是因为有更改在数据中,但您需要从后端获得一些帮助以允许此更改
答案 5 :(得分:-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");
}