将参数传递给flex中的组件

时间:2010-04-20 11:50:44

标签: flex

我有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>

1 个答案:

答案 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。