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- DBに保存されたデータには、フィールドupdateDateがあります。これは、このフィールドの最新の更新時刻です。

2-新規/更新/削除アイテムを照会するたびに、更新アイテムをロードするだけです。(このアプローチでは、削除されたアイテムは実際にはシステムから削除されません。フラグを削除済みに更新するだけです)。

3-更新された配列と現在の配列を比較する場合は、現在の配列のオブジェクトのIDと更新された配列のオブジェクトのIDを比較し、それに応じて更新する必要があります。

このアプローチは、上記のwww.Flextras.comからのコメントに似ています。

于 2012-07-24T03:06:00.100 に答える
0

私はこれを提案します:

  • アレイを使用してバッファとして機能します。

  • バッファサイズを適切なサイズに設定します。10レコードと言います。

  • バッファがいっぱいになるか、指定した瞬間にグリッドにデータを入力します-どちらか前の方。

于 2012-07-24T04:56:58.610 に答える
0

私はあなたが次の方法でそれを行うことができることをお勧めします:

#1

各レコードには独自のIDがあるため、idフィールドに基づいてローカルarraycollectionとリモートarraycollectionを比較し、新しいレコードをローカルarraycollectionに追加できます。

#2

IDを使用したページングをサポートするために、サーバーに新しいAPIを追加します。

例えば:

getRecord(fromid,-1)「fromid」から最新のレコードまでのレコードを返します。getRecord(fromid,toid)からとへのレコードを返します。

于 2012-07-24T07:31:50.303 に答える
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 に答える