flex 3 и автозаполнение

Я пытаюсь получить автоматическое завершение работы, и я могу сделать это нормально, когда я просто создаю массив в своем mxml, а затем просто инициализирую arrayCollection в верхней части файла с помощью ключевого слова initialize.

Однако я хочу заполнить коллекцию массивов из веб-службы, но, похоже, не могу ее получить;

в моем теге приложения у меня есть следующее

creationComplete="init()"
initialize="data2 = new ArrayCollection(data1);" 

затем в моем методе инициализации;

    private function init():void 
{
userRequest.loadWSDL(wsdlUrl);
userRequest.getAllCountries();
}   

// это вызывается, когда я получаю результат от userRequest.getAllCountries ();

 private function getAllCountriesResult(e:ResultEvent):void 
    {
    data1 = new Array(e.result);
        }

однако мое текстовое поле не получает никакого значения.

У кого-нибудь есть идеи?


person cdugga    schedule 20.01.2009    source источник
comment
все еще не работает, я использую веб-сервис для заполнения arrayCollection, есть идеи? также вызывается createComplete перед инициализацией, и если нет, могу ли я вызывать функции из моего intialize? ваше здоровье   -  person cdugga    schedule 20.01.2009
comment
Я действительно получаю данные и автозаполнение, но с одной проблемой, первый элемент в массиве всегда присутствует во время загрузки в поле ввода. Когда я удаляю его и начинаю печатать, он работает нормально, но это не то, что я хочу. Любые идеи?   -  person cdugga    schedule 20.01.2009
comment
Пожалуйста, отредактируйте исходный пост вместо того, чтобы добавлять дополнительную информацию в качестве ответов.   -  person David Hanak    schedule 21.01.2009
comment
Как насчет добавления пустой записи в начало списка в getAllCountriesResult ()?   -  person David Hanak    schedule 21.01.2009


Ответы (2)


Во-первых, массив не может быть привязан, поэтому изменение переменной data1 не повлияет.

Коллекция arrayCollection может быть привязана.

Итак, предполагая, что результат (e.result) на самом деле является массивом (вы должны проверить это при отладке), вы можете сделать следующее

[Bindable]
priavte var ac : ArrayCollection;

то внутри вы получаете функцию getAllCountriesResult.

ac = new ArrayCollection(e.result);

тогда все, что имеет поставщик данных, установленное на var ac, будет обновлено.

Если вы хотите обновить текстовое значение внутри textArea или подобного, вам следует прослушать событие изменения в arrayCollection и затем предпринять соответствующие действия.


из дополнительных пунктов ниже (просто отредактируйте исходный вопрос)

Насколько я понимаю, автозаполнение, о котором вы говорите, - это поле ввода текста с автозаполнением из области обмена Adobe, поскольку обычное текстовое поле не принимает arrayCollection. Если вы разместили какой-то код, вам будет легче помочь. Preinitialize, затем инициализация, затем creationComplete, затем applicationComplete (это порядок, в котором они вызываются).

Если вы используете компонент, о котором я думаю, ознакомьтесь с http://www.websector.de/blog/2008/04/30/quick-tip-avoid-issues-using-adobes-autocomplete-input-component-using-flex-3/ Похоже, у него могут быть проблемы с flex 3, поэтому ознакомьтесь с http://blogs.adobe.com/flex/2006/09/component_autocomplete_text_in.html.

person kenneth    schedule 20.01.2009

Попробуй это:

private function getAllCountriesResult(e:ResultEvent):void 
{
   data2.source = new Array(e.result); // or data2.source = e.result as Array
}

Убедитесь, что data2 уже инициализирован как ArrayCollection.

Что касается автозаполнения, я сам пытаюсь разобраться.

person SS Kim    schedule 11.03.2010