2010-04-20 8 views
1

J'ai 2 fichiers, mon application et un composant personnalisé. Dans mon composant, j'ai un httpservice et une chaîne nommée _requestUrl qui peut être liée. Le httpservice utilise ceci.passer les paramètres au composant en flex

<mx:HTTPService id="srv" 
        url="{_requestUrl}" 
        result="parseHttpResult(event)" 
        resultFormat="xml" 
        method="GET" 
        useProxy="false"> 

Dans mon dossier de candidature je fais une instance de mon composant dans la fonction onCreationComplete.

Dans cette fonction, si je dis

mycomponent._urlRequest ="http://example.com" le httpservice lance une null url error mais si je dis mycomponent.srv.url="http://example.com" cela fonctionne très bien.

Pourquoi est-ce?

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> 

Répondre

1

Parce que lorsque les composants sont initialisés, votre _requestUrl est nulle dans le début de toute façon, c'est pourquoi vous obtenez cette erreur. Et votre URL de srv est liée à une valeur nulle à l'initialisation. Flex crée des composants en phases, donc si vous définissez une variable dans creationComplete etc, creationcomplete est appelée après avoir complètement créé les composants, elle est appelée après quelques millisecondes de l'initialisation de class.

Ainsi, au moment de l'initialisation, par défaut tout est nul, sauf que vous lsinitialisez expression en ligne d'initialisation comme ci-dessous

// 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 

Même pour moi première fois, il était confus, mais dans le contexte Flex, événement initialized est appelée avant " CreationComplete "et dans le contexte de la programmation normale, nous pensons que nous créons et initialisons l'objet plus tard. Dans votre exemple, la liaison commence à fonctionner avant même que "creationComplete" ne soit appelé, ce qui l'amène à signaler une exception de pointeur nul, donc avant cet événement, la propriété de votre objet est nulle.

+0

Je ne comprends pas ça? Je crée le composant avant d'essayer de définir la chaîne? J'ai édité ma question. Ce n'est pas une grosse affaire ou quoi que ce soit .... mon application fonctionne. Ça va juste me déranger si je ne sais pas :) – dubbeat

+0

J'espère que mon explication vous sera utile maintenant. –

+0

C'est génial. Très appréciée! – dubbeat

Questions connexes