【问题标题】:Actionscript 3 ArrayActionscript 3 数组
【发布时间】:2011-08-03 11:43:50
【问题描述】:

我有一个已构建并从 javascript 传递到 actionscript 的数组。在调试时,我可以很好地看到对象,但在实际使用数组时,我无法访问这些值。此外,当将鼠标悬停在“keywords[i]”上时,工具提示会弹出正确的值。

以下sn-p的代码:

//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 为 "Keyword IN ('undefined', 'undefined', 'undefined', 'undefined', 'undefined', 'undefined') "

我可以看到该数组不是“正常”的动作脚本数组,在监视窗口中它给了它一个类型“__HTMLScriptArray”,所以这显然是问题所在。知道如何获取 __HTMLScriptArray 对象中的数据吗?

【问题讨论】:

  • 你是如何将数据从 JS 传递到 Flash 的?
  • 是的,请回答数据的确切来源。

标签: javascript arrays actionscript-3


【解决方案1】:

如果您的关键字数组有效,那么您应该使用连接来构建您的 where 条件:

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

在这种情况下你可以跳过你的whereClause = whereClause.substr(0, whereClause.length-2);

【讨论】:

  • 那是更简洁的代码(并且有效)。谢谢 :) 虽然我应该尝试使用参数而不是像这样构建 where 子句,因为它在预先编译的 SQLStatement 对象中使用。但是,如果您更改 .text 属性,它将(可以理解)必须再次遵守。
【解决方案2】:

您可以尝试使用 for-in 循环。比如:

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

看看这是否有效。

【讨论】:

  • 不同之处可能在于您的 __HTMLScriptArray 不是 flash Array 类型,而是使用字符串作为键而不是整数的对象。 for-in 循环为您提供访问值所需的键。
  • 这就是我的猜测,但为什么将鼠标悬停在关键字[i] 上(在调试时)会在工具提示中为您提供正确的值?
【解决方案3】:

我从未见过这个问题,这是普通的 Flash 还是 Flex? (尽管两者都没有遭受过这种情况),我猜您也在使用 ExternalInterface 。无论如何,不​​要使用普通的 for 循环,而是使用 for each。

【讨论】:

  • 我正在使用 Flex。我没有使用外部接口。我有一个为“mx:HTML”对象注册(或附加)一系列方法的初始化方法。我可以使用一种解决方法,在其中传递一个以管道分隔的字符串并将其转换为数组。但我认为最初的问题很有趣。
  • 我想问题出在没有直接使用 ExternalInterface 上。我从来没有用过你的方法来做这样的事情。
猜你喜欢
  • 2012-02-04
  • 2013-06-07
  • 1970-01-01
  • 2018-12-29
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
相关资源
最近更新 更多