我有2个文件,我的应用程序和自定义组件。
在我的组件中,我有一个httpservice
和一个名为_requestUrl
的字符串,它是可绑定的。 httpservice
使用此功能。
<mx:HTTPService id="srv"
url="{_requestUrl}"
result="parseHttpResult(event)"
resultFormat="xml"
method="GET"
useProxy="false">
在我的应用程序文件中,我在onCreationComplete
函数中创建了我的组件的实例。
如果我说
,请使用此功能 mycomponent._urlRequest ="http://example.com"
httpservice
会引发null url error
,但如果我说mycomponent.srv.url="http://example.com"
则可以正常使用。
为什么会这样?
修改
<mx:Script>
import mx.events.FlexEvent;
import components.custom
private var comp:custom= new custom()
private var comp:custom= new custom()
public function setVars(event:FlexEvent):void
{
comp._requestUrl = "http://example.com"
comp.setVars(event)
pform.addChild(comp)
}
//creationComplete="setVars(event)"
</mx:Script>
答案 0 :(得分:1)
因为在初始化组件时,无论如何你的_requestUrl在开头都是null,这就是你得到这个错误的原因。并且你的srv url在初始化时绑定为null值。
Flex分阶段创建组件,因此如果在creationComplete等中设置变量,则在完全创建组件后调用creationcomplete,在类初始化几毫秒后调用它。
因此,在初始化时,默认情况下,除了将内联init表达式初始化为
之外,所有内容都为null// this will not be null...
var myUrl:String = "my url";
// this will be null
var myUrl2:String;
// binding above value may give null exception
// because it is null at time of initialization
即便是我第一次感到困惑但是在Flex的上下文中,Initialized事件在“CreationComplete”之前调用,在正常的编程环境中,我们认为我们稍后会创建并初始化对象。
在您的示例中,绑定在调用“creationComplete”之前开始工作,导致它报告空指针异常,因此在此事件之前,您的对象的属性是任何方式为null。