4

配列を使用して DataProvider にデータを入力しています。これを使用して、リスト コンポーネントにデータを入力しています。このような:

var myDataProvider = new DataProvider(this.myArray);
this['list'].dataProvider = myDataProvider;

配列に変更が加えられたら、DataProvider に更新を指示して、それらの変更がリスト コンポーネントに反映されるようにします。配列の変更をリッスンしてそれ自体を更新するように DataProvider に指示する方法があればいいのですが、手動で更新する方法に落ち着きます。

DataProvider を新しい DataProvider に置き換えることはできますが、リストの選択が失われます。DataProvider を調べて、すべてのエントリを比較および変更して、配列と一致させることができると思いますが、これは面倒すぎるようです。配列に一致するように更新するように DataProvider に指示する方法はありますか?

編集: Flex ではなく Flash でこれを行う方法を探しています。

4

4 に答える 4

1

データプロバイダーと元の配列の間の接続が何であるかを把握するために、過去 4 時間を費やしました。データグリッドで GetItemAt メソッドを使用すると、GetItemAt メソッドを使用すると、データグリッドのデータプロバイダーが自動的に更新される配列も更新されることがわかりました。

import fl.events.ListEvent;
import fl.data.DataProvider;

var arr = new Array();
arr.push ({Name:"Mike",Height:"6'4"});
arr.push ({Name:"Jackie",Height:"5'9"});
arr.push ({Name:"Mike",Height:"0'10"});

dg.addColumn("Name");
dg.addColumn("Height");
dg.dataProvider = new DataProvider(arr);
dg.addEventListener(ListEvent.ITEM_CLICK,updatename);

function updatename(e):void {
e.target.getItemAt(e.rowIndex)["Name"] = name_txt.text;
trace (arr[e.rowIndex]["Name"]);
}

私を悩ませているのは、removeItemAt メソッドを使用していることです。データグリッドから行を削除しますが、配列は更新しません。このプロジェクトの開始時には、getItemAt が配列を更新するとは思いもしませんでした。そのため、コードがどのように 2 回減算されているかを把握するために 4 時間を費やしました。

于 2011-08-01T04:05:21.790 に答える
1

同様に、配列を更新すると、データグリッドが自動的に更新されます (少なくとも Flash CS4 では)。

import fl.events.ListEvent;
import fl.data.DataProvider;

var arr = new Array();
arr.push ({Name:"Mike",Height:"6'4"});
arr.push ({Name:"Jackie",Height:"5'9"});
arr.push ({Name:"Mike",Height:"0'10"});

dg.addColumn("Name");
dg.addColumn("Height");
dg.dataProvider = new DataProvider(arr);
dg.addEventListener(ListEvent.ITEM_CLICK,updatename);


function updatename(e):void {
    arr[e.rowIndex]["Name"] = "none";
}

ただし、arr.splice を使用して配列内の行を削除し、データグリッドを自動的に更新することはできません。削除 (スプライス) と追加 (プッシュ) の場合、配列とデータグリッドを別々に更新する必要があります。

于 2011-08-01T04:10:36.053 に答える