2010-10-05 6 views
0

Les valeurs XML sont stockées dans la collection de tableaux 'arr'. en fonction de la longueur de la matrice stockée, les composants décrits ci-dessous sont créés et assignent dynamiquement ces valeurs aux composants pertinents.Affectation de valeurs Xml aux composants créés dynamiquement

Par exemple:

AdvanceSearch.mxml est un composant, et un autre des composants en tant advanceSearchAtom.mxml. dans 'advanceSearchAtom' a quelques sous-composants comme zone de texte, zone de liste déroulante, etc. nous pouvons ajouter de nombreux advanceSearchAtom.mxml dans 'AdvanceSearch.mxml'.

var container : AdvanceSearch; 

var adv : advanceSearchAtom; 

for(var i:int=0;i<arr.length;i++) { 
    adv = new advanceSearchAtom(); 

    adv.field.text = arr[i].field; 
    adv.value.selectedIndex = arr[i].value; 

    container.addChild(adv); 
} 

S'il vous plaît laissez-moi savoir si quelqu'un vient à travers ce type de problème. si un lien pertinent est appréciable. Merci à l'avance

Répondre

0

Vous n'avez pas mentionné, mais je suppose que le problème est que vous obtenez une erreur de référence null (1009) sur les lignes suivantes:

adv.field.text = arr[i].field; 
adv.value.selectedIndex = arr[i].value; 

Ai-je raison? Ceci est dû au fait que field et value ne sont pas encore créés Conformément à l'instanciation de composant par défaut, Flex crée les enfants uniquement lorsque cela est nécessaire, c'est-à-dire lorsqu'il doit être affiché.

Vous pouvez écouter l'événement creationComplete du composant AdvanceSearchAtom et mettre à jour les valeurs à partir de là; ou avoir des variables publiques Binadble dans la classe AdvanceSearchAtom, les lier à field.text et value.selectedIndex et affecter des valeurs xml à ces variables dans la boucle.

L'utilisation complète de la création:

public var container:AdvanceSearch; 
public var searchItems:Array = []; 
public var arr:Array; 

//assuming that arr has been initialized with xml values. 
var adv:AdvanceSearchAtom; 
for(var i:int=0;i<arr.length;i++) { 
    adv = new AdvanceSearchAtom(); 
    adv.addEventListener(FlexEvent.CREATION_COMPLETE, onAtomCreated); 
    container.addChild(adv); 
    searchItems.push(adv); 
} 

public function onAtomCreated(e:Event):void 
{ 
    var adv:AdvanceSearchAtom = e.currentTarget as AdvanceSearchAtom; 
    if(!adv) 
     return; 
    var index:Number = searchItems.indexOf(adv); 
    adv.field.text = arr[index].field; 
    adv.value.selectedIndex = arr[index].value; 
} 

En utilisant la liaison de données:

intérieur AdvanceSearchAtom.mxml

<mx:TextInput id="field" text="{textValue}"/> 
<mx:ComboBox id="value" selectedIndex="{comboIndex}"/> 

Dans le bloc de script de AdvanceSearchAtom.mxml

[Bindable] 
public var textValue:String; 

[Bindable] 
public var comboIndex:Number; 
var adv:AdvanceSearchAtom; 

Dans la classe AdvanceSearch:

for(var i:int=0;i<arr.length;i++) { 
    adv = new AdvanceSearchAtom(); 
    container.addChild(adv); 
    adv.field.text = arr[i].field; 
    adv.value.selectedIndex = arr[i].value; 
} 
+0

Merci de donner cette merveilleuse réponse. J'espère que cela aidera MW à résoudre mon problème. Merci beaucoup. – raj

Questions connexes