1

我有一个具有自动完成功能的文本输入字段,我从 Web 服务填充它的数据提供程序。

我将 web 服务调用的结果分配给 dataprovider

ac.dataProvider = e.result;

但是我现在想编辑从 ResultEvent 返回的每个字段,以便添加更多信息,我尝试做这样的事情;

var results:ArrayCollection = new ArrayCollection(new Array(e.result));
var newResultsArray:ArrayCollection;
var array:Array = new Array;
for(var i:int = 0 ; i < results.length; i++)
{
   array[i] = results.getItemAt(i) + "extraInformation";    
}
newResultsArray = new ArrayCollection(array);
acu.dataProvider = newResultsArray; 

然而,这只会使所有结果出现在一个领域。关于如何以与 result.event 返回的格式相同的格式将编辑的数据分配给我的数据提供者的任何建议?

问题似乎是包含

results.getItemAt(i) + "extraInformation";

正在将调用的完整内容返回到一行中。有什么方法可以将其分解,以便我可以从 ResultEvent 中获取每一行?

4

4 回答 4

1

这完全取决于 e.result 是什么。我怀疑它是某种对象/xml,因此当您将其放入数组然后放入arrayCollection 时,它只会填充arrayCollection 中的元素0。

我认为您需要做的是遍历任何 e.result 并将其每个元素添加到 arrayCollection。

因此,例如,如果 e.result 是 XML,那么请尝试以下操作

var xmlBack : XML = XML(e.result);
var xmllist : XMLList = new XMLList();
xmllist = xmlBack.nodeYourLookFor;
var results = new ArrayCollection();
for each(var xml : XML in xmllist ){
    results.addItem(xml.toString));
}

yourAutoComplete.dataProvider = results;

正如我所说,这一切都取决于 e.result 是什么。

于 2009-01-22T10:57:46.700 回答
0

它实际上是我找回的一个对象,

当我调试并查看我的 web 服务的内容时,将其称为 arrayCollection。我是 Flex 的新手,所以这个基本的东西仍然给我带来了问题!:)

于 2009-01-22T11:11:13.897 回答
0

通过执行以下操作对其进行排序;

var lengthOfResult:int = e.result.length;
var arrayCollResults:ArrayCollection = new ArrayCollection();
var resultArray:Array = new Array(e.result);
    for(var i:int = 0 ; i < lengthOfResult; i++){
    arrayCollResults.addItem(e.result[i] + additionalInfo);
}
ac.dataProvider = arrayCollResults;
于 2009-01-22T13:27:24.543 回答
0

从你的问题来看,听起来你想保持数据(及其类型)完好无损,你应该能够在你的事件处理程序中,而无需创建新的集合、强制转换等。但是 kenneth 是对的——这很难在不知道结果的类型和结构的情况下具体。

从您在我回复时发布的附录判断,您应该能够做到这一点,因为结果看起来是一个数组:

for (var i:int = 0; i < e.result.length; i++)
{
    e.result[i] += newInformation;
}

var ac:ArrayCollection = new ArrayCollection(e.result);

...直接更改结果数据,然后从中创建一个新的 ArrayCollection。不过,您想出的内容与此之间没有重大区别 - 只是想说明如何在转换结果数据或从中创建新对象之前直接修改结果数据。

于 2009-01-22T13:37:00.107 回答