Flex - 使用来自javascript的数据使用arrayCollection填充Combobox

时间:2012-03-07 08:12:01

标签: javascript flex actionscript photoshop-script

我正在使用Flex和Extendscript在Photoshop中开发一个面板。我非常接近让这个工作,但凭借我的Flex技能,我对从jsx文件中提取的数组有一点问题。数组在警告框中显示正常,但在我的拆分和创建新集合之间的某处是错误的。感谢您的帮助。

这是我的Flex

protected function loadData():void {
    var grabFolderNames:SyncRequestResult = CSXSInterface.instance.evalScript("labNames");
    var list:String = grabFolderNames.data;
    var array:Array = list.split(",");
    var arrayCollection:ArrayCollection = new ArrayCollection();
    arrayCollection.source = array;
    labFolderList.dataProvider = arrayCollection;
}

这是jsx

function labNames() {
  var labs = ["Red", "Green", "Blue", "Purple", "Yellow"];
    alert("This function is firing" + labs);
}

2 个答案:

答案 0 :(得分:0)

我不熟悉CSXSInterface但是,由于labNames()只是在警告中显示字符串,并且不将其作为字符串返回,grabFolderNames.data可能不包含您希望它包含的内容。为什么不用调试器检查它的值?

答案 1 :(得分:0)

1)您应该修改labNames()方法以返回数组:

function labNames() {
    var labs = ["Red", "Green", "Blue", "Purple", "Yellow"];
    return labs;
}

2)确保您的flex对象的HTML包装器中有allowScriptAccess="always"(或allowScriptAccess="sameDomain"),以便启用javascript / Flex通信。

3)如果仍然无效,请替换

var grabFolderNames:SyncRequestResult = CSXSInterface.instance.evalScript("labNames");

由:

var obj:* = CSXSInterface.instance.evalScript("labNames");

然后在该行上设置一个断点,看看“obj”是否由某些数据填充并在此处报告结果。

希望有所帮助。