1

autoComplete を持つテキスト入力フィールドがあり、そのデータプロバイダーを Web サービスから入力します。

Web サービス呼び出しの結果をデータプロバイダーに割り当てます

ac.dataProvider = e.result;

ただし、ResultEventから返された各フィールドを編集して、さらに情報を追加できるようにしたいので、次のようなことを試しました。

var results:ArrayCollection = new ArrayCollection(new Array(e.result));
var newResultsArray:ArrayCollection;
var array:Array = new Array;
for(var i:int = 0 ; i < results.length; i++)
{
   array[i] = results.getItemAt(i) + "extraInformation";    
}
newResultsArray = new ArrayCollection(array);
acu.dataProvider = newResultsArray; 

ただし、これはすべての結果が 1 つのフィールドに表示されるようにするだけです。編集したデータを、result.event が返すのと同じ形式で dataprovider に割り当てる方法について何か提案はありますか?

問題は、次を含む行にあるようです

results.getItemAt(i) + "extraInformation";

呼び出しの完全な内容を 1 つの行に返しています。ResultEvent から個々の行を取得できるように、これを分割する方法はありますか?

4

4 に答える 4

1

それはすべて e.result が何であるかに依存します。私はそれがある種のオブジェクト/xmlであると疑っています。そのため、それを配列にしてからarrayCollectionにすると、arrayCollectionに要素0が入力されるだけです。

あなたがする必要があると思うのは、e.resultが何であれ反復し、その各要素をarrayCollectionに追加することです。

たとえば、e.result が XML の場合は、次のことを試してください。

var xmlBack : XML = XML(e.result);
var xmllist : XMLList = new XMLList();
xmllist = xmlBack.nodeYourLookFor;
var results = new ArrayCollection();
for each(var xml : XML in xmllist ){
    results.addItem(xml.toString));
}

yourAutoComplete.dataProvider = results;

私が言ったように、それはすべて e.result が何であるかに依存します。

于 2009-01-22T10:57:46.700 に答える
0

それは実際に私が返すオブジェクトであり、

デバッグしてWebサービスの内容を確認すると、その配列コレクションが呼び出されます。私はFlexを初めて使用するので、この基本的なことがまだ問題を引き起こしています!:)

于 2009-01-22T11:11:13.897 に答える
0

あなたの質問から、新しいコレクションを作成したり、キャストしたりせずに、イベントハンドラー内でデータ (およびその型) をそのままにしておく必要があるように思えます。しかし、ケネスは正しいです。結果のタイプと構造を知らなくても特定できます。

私が返信したときに投稿されたあなたの補遺から判断すると、結果が配列のように見えるので、これを行うことができたはずです:

for (var i:int = 0; i < e.result.length; i++)
{
    e.result[i] += newInformation;
}

var ac:ArrayCollection = new ArrayCollection(e.result);

... 結果データを直接変更し、そこから新しい ArrayCollection を作成します。ただし、思いついたものとこれに大きな違いはありません。結果データから新しいオブジェクトをキャストまたは作成する前に、結果データを直接変更する方法を説明したかっただけです。

于 2009-01-22T13:37:00.107 に答える