2011-08-03 9 views
1

私は、javascriptから作成され、actionscriptに渡された配列を持っています。デバッグ中はオブジェクトをうまく見ることができますが、実際に配列を使用すると値にアクセスできません。さらに、キーワード[i]にカーソルを合わせると、ツールチップが正しい値をポップアップ表示します。Actionscript 3 Array

次のコードスニペット:whereClauseのvarが「キーワードIN( '未定義'、 '未定義'、 '未定義' であることに

//build where clause 
var whereClause:String = "Keyword IN ("; 
for(var i:int=0;i<keywords.length;i++) { 
    whereClause += "'" + keywords[i] + "', "; 
} 

whereClause = whereClause.substr(0, whereClause.length-2); 
whereClause +=") "; 

結果は '未定義'、 '未定義'、 '未定義' ) "

私は配列が '通常の'アクションスクリプト配列ではないことがわかります。ウォッチウィンドウには、型 '__HTMLScriptArray'があります。これは明らかに問題の原因です。どのように__HTMLScriptArrayオブジェクト内のデータを取得するか考えていますか?

+0

がどのようにフラッシュにJSからデータを渡しているスキップすることができ、その場合

var whereClause : String = "Keyword IN ('"; whereClause += keywords.join("', '"); whereClause += "')"; 

は、 ? – shanethehat

+0

はい、データが正確にどこから来ているか答えてください。 –

答えて

1

代わりにfor-inループを使用できます。次のようなもの:

for (var key:String in keywords) 
{ 
    trace(key, ':', keywords[key]); // trace for debugging, to see key and value 
    whereClause += "'" + keywords[key] + "', "; 
} 

これが機能するかどうかを確認してください。

+0

これはうまくいった - ありがとう。違いは何ですか? –

+0

違いはおそらく、あなたの__HTMLScriptArrayはフラッシュArray型ではなく、文字列を整数ではなくキーとして使用するオブジェクトです。 for-inループは、値にアクセスするために必要なキーを提供します。 –

+0

これは私が推測したことですが、キーワード([デバッグ中])がツールチップに正しい値を与えるのはなぜですか? –

0

私はこの問題を見たことがない、これはプレーンなFlashかFlexか? (いずれにしてもこれに苦しんでいないが)、私はあなたもExternalInterfaceを使っていると思う。とにかく、通常のforループを実行する代わりに、それぞれforを使用します。

+0

私はFlexを使用しています。私はExternalInterfaceを使用していません。私は、 'mx:HTML'オブジェクトの一連のメソッドを登録(または付加)する初期化メソッドを持っています。 私はパイプで区切られた文字列を渡して、配列に変換することができます。しかし、元の問題は面白いと思った。 –

+0

私は問題が直接ExternalInterfaceを使用していないから来ていると思います。私はこのようなもののためにあなたの方法を使ったことはありません。 – Neverbirth

3

キーワードの配列が有効である場合には、あなたが参加使ってWHERE条件を構築する必要があります。私、あなたのwhereClause = whereClause.substr(0, whereClause.length-2);

+0

それはもう少しのコードです(それは働いた)。ありがとう:) 私はパラメータを使用して、それが事前に準拠しているSQLStatementオブジェクトで使用されているので、このようなwhere節を作成しないようにしてください。しかし、.textプロパティを変更すると、それは(当然ながら)再度遵守する必要があります。 –