2011-08-03 96 views
1

我有一個數組已經構建並從JavaScript傳遞到actionscript。調試時,我可以看到對象很好,但實際使用數組時,我無法訪問這些值。此外,當鼠標懸停在關鍵字[i]上時,工具提示彈出正確的值。Actionscript 3 Array

下面的代碼片斷:

//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 +=") "; 

導致whereClause VAR是「關鍵字( '未定義', '未定義', '未定義', '未定義', '未定義', '未定義' )「

我可以看到該數組不是'普通'動作數組,在監視窗口中給它一個類型'__HTMLScriptArray',所以這顯然是問題來自何處。任何想法如何獲取__HTMLScriptArray對象中的數據?

+0

你是如何從JS傳遞數據到Flash ? – 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可能不是閃存數組類型,而是使用字符串作爲鍵而不是整數的對象。 for-in循環爲您提供訪問這些值所需的鍵。 –

+0

這就是我猜的,但爲什麼懸停在關鍵字[我](同時調試)給你正確的價值在工具提示? –

0

我從來沒有見過這個問題,這是普通的Flash還是Flex? (儘管在這兩者中都沒有受到這種影響),我猜你也在使用ExternalInterface。無論如何,而不是做一個正常的循環,每個使用一個。

+0

我正在使用Flex。我沒有使用ExternalInterface。我有一個初始化方法,它爲'mx:HTML'對象註冊(或附加)一系列方法。 我可以使用繞過管道分隔字符串的工作,並將其轉換爲數組。但我認爲最初的問題很有趣。 –

+0

我想這個問題來自於不直接使用ExternalInterface。我從來沒有使用過這種方法。 – Neverbirth

3

如果您的關鍵字數組是有效的,那麼你應該建立自己的地方使用連接條件:

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

我的話,你可以跳過你的whereClause = whereClause.substr(0, whereClause.length-2);

+0

這是整潔的代碼(和它的工作)。謝謝:) 雖然我應該嘗試使用一個參數,而不是像這樣構建where子句,因爲它在預編譯的SQLStatement對象中使用。但是,如果您更改.text屬性,它將(可以理解)必須重新編寫。 –