我有一个textInput字段,其中包含autoComplete,我从webservice填充其dataprovider。
我为dataprovider分配了一个webservice调用的结果
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;
然而,这只是在一个领域中将所有结果归结为apear。有关如何以与result.event返回的格式相同的格式将编辑后的数据分配给我的数据提供者的任何建议吗?
问题似乎是包含
的行results.getItemAt(i) + "extraInformation";
将调用的完整内容返回到一行。是否有任何方法可以解决这个问题,以便我可以从ResultEvent中获取每一行?
答案 0 :(得分:1)
这将取决于什么是结果。我怀疑它是某种对象/ 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;
正如我所说,一切都取决于结果是什么。
答案 1 :(得分:0)
它实际上是我回来的一个对象,
当我调试并查看我的webservice的内容时,调用它的一个arrayCollection。 我是Flex的新手,所以这个基本的东西仍然会给我带来问题!:)
答案 2 :(得分: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;
答案 3 :(得分:0)
从您的问题来看,听起来您想要保留数据(及其类型)完整,您应该能够在事件处理程序中创建,而无需创建新的集合,转换等。但是kenneth是对的 - 它是在不知道结果的类型和结构的情况下很难具体。
根据你的附录,在我回复时发布,你应该能够做到这一点,因为看起来结果是一个数组:
for (var i:int = 0; i < e.result.length; i++)
{
e.result[i] += newInformation;
}
var ac:ArrayCollection = new ArrayCollection(e.result);
...直接更改结果数据,然后从中创建一个新的ArrayCollection。尽管如此,你想出的内容与此之间没有什么重大区别 - 只是想说明如何在投射或从中创建新对象之前直接修改结果数据。