2009-01-20 38 views
0

即时通讯尝试让自动完成工作,我可以做得很好,当我只是在我的mxml中创建一个数组,然后在initialize关键字的文件顶部初始化一个arrayCollection。flex 3和autoComplete

但是我想从Web服务填充arraycollection,但我似乎无法得到它;

IM我的应用程序标签,我有以下

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

然后在我的init方法;

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

//当我从userRequest.getAllCountries()得到一个结果时调用这个函数;

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

但是,我的文本框没有得到任何价值。

有想法的人吗?

+0

我实际上得到的数据和autoComplete工作,但有一个问题,数组中的第一个元素总是出现在加载时在输入框中。当我删除它,并开始输入它工作正常,但这不是我想要的。 任何想法? – cduggan 2009-01-20 18:18:09

回答

1

首先,数组不是可绑定的,所以更改变量data1将没有效果。

arrayCollection是可绑定的。

所以presumming的结果(e.result)实际上是一个数组(你应该检查这个调试时),那么你可以做以下

[Bindable] 
priavte var ac : ArrayCollection; 

然后里面你getAllCountriesResult功能。

ac = new ArrayCollection(e.result); 

然后任何有数据提供者设置为var ac的任何东西都会被更新。

如果您希望更新textArea或类似内容中的文本值,则应该监听arrayCollection中的更改事件,然后执行相应的操作。


从下面(编辑你原来的问题)

您的附加分我把它你谈论的是自动完成从Adobe交换区自动完成文本输入框,一个普通的文本框不拿一个arrayCollection。 如果你发布了一些代码,它可能会更容易帮助你。 预先初始化,然后初始化,然后创建完成,然后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

0

试试这个:

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

确保数据2已经被初始化为ArrayCollection中。

至于AutoComplete,我试图自己解决问题。