гибкое редактирование результата ResultEvent - PullRequest
1 голос
/ 22 января 2009

У меня есть поле ввода текста, в котором есть автозаполнение, я заполняю его провайдер данных из веб-сервиса.

Я назначаю провайдеру данных результат вызова веб-службы

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 ]

1 голос
/ 22 января 2009

все будет зависеть от того, что такое e.result. Я подозреваю, что это какой-то объект / xml, и поэтому, когда вы делаете его в массив, то в arrayCollection он только заполняет элемент 0 в arrayCollection.

Я думаю, что вам нужно будет выполнить итерацию того, что есть в 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;

Как я уже сказал, все зависит от того, каков результат.

0 голосов
/ 22 января 2009

По вашему вопросу звучит так, как будто вы хотите оставить данные (и их тип) нетронутыми, что вы должны иметь в своем обработчике событий, без создания новых коллекций, приведения и т. Д. Но Кеннет прав - это трудно быть конкретным, не зная типа и структуры вашего результата.

Судя по вашему приложению, опубликованному так, как я отвечал, вы должны были это сделать, поскольку похоже, что результатом был массив:

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

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

... чтобы напрямую изменить данные результата, а затем создать из них новую коллекцию ArrayCollection. Тем не менее, между тем, что вы придумали, и между этим нет большой разницы - просто хотелось проиллюстрировать, как вы могли бы изменить данные результата непосредственно перед преобразованием или созданием из него новых объектов.

0 голосов
/ 22 января 2009

Получил это, выполнив следующее:

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;
0 голосов
/ 22 января 2009

это фактически объект, который я получаю,

когда я отлаживаю и смотрю на содержимое моего веб-сервиса, вызываю массив arrayCollection. Я новичок в Flex, так что эта основная вещь все еще вызывает у меня проблемы! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...