2010-01-15 4 views
0

Je travaille sur le chargeur multiple et je souhaite définir le répertoire de téléchargement en fonction d'un identificateur de question sélectionné (qui est le nom du répertoire) dans ma grille de données.Flex - Problème avec la liaison dans les blocs de script

Le code peut être trouvé ici http://pastie.org/784185

Quelque chose comme ceci:

J'ai mis myQuestionID (le répertoire à télécharger sur) donc il est bindable (lignes 136-137):

[Bindable] public var myQuestionID:int; 

Dans mon DataGrid-je utiliser un gestionnaire de changement (ligne 539):

change="setQuestionID();" 

Nous fixons la variable dans la fonction setQuestionID (lignes 400-407):

[Bindable (event="questionChange")]   
private function setQuestionID():void 
{ 
    myQuestionID = questionsDG.selectedItem.QuestionID; 
    dispatchEvent(new Event("questionChange")); 
} 

Et puis essayez de l'utiliser dans mon script Uploader (lignes 448-475):

// initUploader is called when account info loads 
public function getSessionInfoResult(event:ResultEvent):void{   

     // Get jsessionid & questionid (final directory) for CF uploader 
     myToken = roAccount.getSessionToken.lastResult;    
     // BUG: myQuestion is null in actionscript, but okay in form. 

     var postVariables:URLVariables = new URLVariables(); 
     postVariables.jsessionid = myToken; 
     postVariables.questionid = myQuestionID;    

     multiFileUpload = new MultiFileUpload(
        filesDG, 
        browseBTN, 
        clearButton, 
        delButton, 
        upload_btn, 
        progressbar, 
        uploadDestination, 
        postVariables, 
        350000, 
        filesToFilter 
        ); 

     multiFileUpload.addEventListener(Event.COMPLETE,uploadsfinished);   
} 

Je peux voir dans mon MXML que la valeur binded (ligne 639):

<mx:Label text="{myDirectory}"/> 

et il met à jour lorsque je clique sur une ligne dans mon DataGrid. Cependant, si j'essaie d'accéder à cette valeur myQuestionID à l'intérieur d'un script d'action, il apparaîtra comme nul (0). Je sais que mon uploader fonctionne car je peux hardcode myDirectory à un répertoire connu et il téléchargera bien.

Je suis vraiment perplexe.

+0

Veuillez indiquer plus de code – Patrick

+0

Dans quelle fonction cette ligne apparaît-elle 'myDirectory = myDataGrid.selectedItem.someID;'? Comment/quand appelez-vous cette fonction? – Amarghosh

+0

Pouvez-vous poster le fichier sur pastie ou gist ou quelque chose? On dirait que cela devrait fonctionner, mais ce pourrait être une question de portée ou quelque chose que vous ne pensiez pas l'affecter. – Sophistifunk

Répondre

0

La raison QuestionID = null est que getSessionInfoResult() est appelée par votre code d'initialisation avant que la valeur limite de myQuestionID est réglé.

Votre uploader de fichier (multiFileUpload) est déjà instancié avec myQuestionID = null.

Vous devez instancier/transmettre la valeur dans le composant multiFileUpload après son réglage.

+0

Oui, c'était ça - merci Johan. J'oublie que dans init() d'une application, toutes les valeurs sont placées dans la pierre si elles sont à l'intérieur d'une fonction, et que vous devez vous en libérer si vous voulez que vos variables soient dynamiques. –

0

Utilisez l'événement de changement dataGrid pour définir myDirectory chaque fois que la sélection a été modifiée par l'utilisateur. cela mettra à jour la valeur de myDirectory correctement.

En faisant someID comme Bindable résoudrait la plupart du temps votre problème si vous ne voulez pas utiliser l'événement de changement sur la DG

Questions connexes