передача параметров компоненту в flex - PullRequest
1 голос
/ 20 апреля 2010

У меня есть 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", то он отлично работает.

Почему это?

EDIT:

<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 Ответ

1 голос
/ 20 апреля 2010

Потому что, когда компоненты инициализируются, ваш _requestUrl в любом случае имеет значение null, поэтому вы получаете эту ошибку. И ваш URL srv связан с нулевым значением при инициализации.

Flex создает компоненты поэтапно, поэтому, если вы устанавливаете переменную в creationComplete и т. Д., Creationcomplete вызывается после того, как он полностью создал компоненты, он вызывается через несколько миллисекунд инициализации класса.

Таким образом, во время инициализации по умолчанию все равно null, за исключением того, что вы инициализируете его встроенным выражением init, как показано ниже

// 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", что заставляет его сообщать об исключении нулевого указателя, поэтому перед этим событием свойство вашего объекта в любом случае равно нулю.

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