アプリケーションでリスト/グリッド コントロールを作成し、それをWeb アプリケーションFlex
で使用しています。.NET
非常に長い話を短くするために、シリアル化されたオブジェクトの Web サービスから XML を取得しています。1 ページに表示できるページ数に制限があります。データ グリッドをページ化し、ページ間で並べ替え、いくつかの基本的なフィルター処理を行いました。
ページングに関しては、ページをキーとする辞書を使用し、そのページの XML を保存しています。このようにして、このディクショナリに保存したページにユーザーが戻ってくるたびに、Web サービスにアクセスする代わりに、ローカル メモリから XML を取得できます。基本的に、データのページの Web サービスへの各呼び出しから取得したデータをキャッシュしています。
キャッシュが期限切れになる可能性のあるものがいくつかあります。フィルタリングとソートが主な理由です。ただし、ユーザーはエディタを開いてグリッド内のデータ行を編集できます。編集したデータが原因で、行に表示されるデータが古くなる可能性があります。簡単に Web サービスにアクセスしてページ全体のデータを取得できますが、ページ サイズは実行時に設定されるため、取得するレコードが大量に表示される可能性があります。
それでは、私が経験している問題の核心に触れさせてください。データのページ全体が返されないようにするために、完全に更新されたレコードを要求する Web サービスを呼び出します (エディターがデータの保存を処理します)。
カスタム オブジェクトを使用しているため、サーバー上でそれらを XML にシリアル化する必要があります (これは、ソフトウェアの他の部分で既に処理されています)。すべてのデータは、e4x で XML を介して処理されます。Dictionary のキャッシュは、XMLList として格納されます。
それでは、私のコードをお見せしましょう...
var idOfReplacee:String = this._WebService.GetSingleModelXml.lastResult.*[0].*[0].@Id;
var xmlToReplace:XMLList = this._DataPages[this._Options.PageIndex].Data.(@Id == idOfReplacee);
if(xmlToReplace.length() > 0)
{
delete (this._DataPages[this._Options.PageIndex].Data.(@Id == idOfReplacee)[0]);
this._DataPages[this._Options.PageIndex].Data += this._WebService.GetSingleModelXml.lastResult.*[0].*[0];
}
基本的に、置き換えたいノードのIDを取得します。次に、キャッシュの Data プロパティ ( XMLList
) でそれを見つけます。2 行目のフィルターが を返すので、存在することを確認しますXMLList
。
私が抱えている問題は、削除行にあります。その行をリストからそのノードを削除することはできません。削除行の次の行が機能します。ノードをリストに追加しました。
そのノードを置換または削除するにはどうすればよいですか (キャッシュの .Data プロパティのフィルター ステートメントから見つけたノードを意味します)。
これが投稿されたときに、すべての変数のアンダースコアがエスケープされたままにならないことを願っています! そうでなければthis._ == this
._