2

特定のデータを含むオブジェクトを検索して返すことができるように、flex ArrayCollection を拡張しようとしています。

これが私の機能です:

public function getItemContaining(value: String): Object {                      
          //Loop through the collection         
          for each(var i: Object in this) {                             
            //Loop through fields                               
            for(var j: String in i) {                   
                //If field value is equal to input value
                if(i[j] == value) {
                    return i;

                }
            }
        }
    //If not found
    return null;
    }

問題は、j が常に null であるため、2 番目のループが機能しないことです。だから私はフレックスループの説明を読んで、実際にはうまくいくはずです。何が問題になる可能性がありますか?

4

3 に答える 3

2

次のようにしてみてください。

for (var name:String in myObject){
  trace(name + ":" + myObject[name];
}

わかりました、それは実際にあなたがしていたのと同じでした。エラーは次の行にある必要があります。

for each(var i: Object in this) {

これを使用してみてください:

for each(var i: Object in this.source) {
于 2010-01-28T13:45:24.557 に答える
0

ArrayCollection をデータソースとして使用している場合は、IViewCursor インターフェイスの使用を検討する必要があります。カスタムの比較関数を提供するか、最上位の比較対象のフィールドを提供できます。このインターフェイスは、adobe/livedocs の例で十分に文書化されています

var _cursor:IViewCursor;
var _idSortField:SortField;
var _idSort:Sort = new Sort();
_idSortField = new SortField();
_idSortField.compareFunction = this.myCompareFunction; 
_idSort.fields = [_idSortField];
myArrayCollection.sort = _idSort;
myArrayCollection.refresh();
_cursor = myArrayCollection.createCursor();
if (_cursor.findAny(search))
   return _cursor;

特定のプロパティの値を検索する場合は、さらに簡単です。このトピックに関するadobe livedocsへのリンクは次のとおりです

于 2010-01-28T18:11:28.667 に答える
0

私の最初の本能は、データ型を確認することです。ループ宣言を設定していますがj:String、症状jは常に null です。これは、Flex が の要素を文字列として解釈できていないことを示唆していiます。Flex が の要素をiオブジェクトとしてのみ認識する場合 (すべての文字列がオブジェクトであり、オブジェクトが最小公分母であるため)、 に対して null が返されますj:String

内側のループでこれを試してください:

for(var j: Object in i) {                   
    //If field value is equal to input value
    if(i[j] is String && (i[j] as String) == value) {
        return i;
    }
}
于 2010-01-28T16:31:15.253 に答える