IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

itemEditor et petit bug d'alignement


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut itemEditor et petit bug d'alignement
    Bonjour,

    j'utilise un itemEditor tout simple dans un dataGrid. Cela marche bien sauf que lorsque je quitte l'itemEditor pour réafficher l'itemRenderer par défaut, j'ai quelque fois (pas toujours) un alignement vertical dans la cellule erroné.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    colonne = new DataGridColumn();
    colonne.setStyle("textAlign", TextAlign.CENTER);
    colonne.setStyle("verticalAlign", VerticalAlign.MIDDLE);
    colonne.dataField = "accu_totale";	
    colonne.headerText = "accu. intraday";
    colonne.itemEditor = new ClassFactory(AccuEditor);
    colonne.editorDataField = "retour";
    colonne.labelFunction = number_format_items;
    colonne.setStyle("color", 0x0000FF);	
    colonnes.push(colonne);
    ...
    Mon itemEditor:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    package itemEditor
    {	
    	import mx.collections.ArrayCollection;
    	import mx.containers.VBox;
    	import mx.controls.Alert;
    	import mx.events.FlexEvent;
     
    	import spark.components.TextInput;
    	import spark.events.TextOperationEvent;
    	import spark.layouts.HorizontalAlign;
    	import spark.layouts.VerticalAlign;
     
    	public class AccuEditor extends VBox 
    	{		
    		[Bindable] public var retour:String;
    		private var _data:Object;
    		private var textInput:TextInput;	
     
    		[Bindable]
    		override public function set data(value:Object):void{
    			_data = value;
    			draw();			
    		}
     
    		override public function get data():Object{
    			return _data;
    		}
     
    		private function draw():void
    		{
    			removeAllElements();
     
    			setStyle("horizontalAlign", HorizontalAlign.CENTER);
    			setStyle("verticalAlign", VerticalAlign.MIDDLE);
     
    			textInput = new TextInput();
    			textInput.percentWidth = 90;
     
    			textInput.text = data.accu_totale;
    			textInput.restrict = "0-9";
    			textInput.addEventListener(FlexEvent.UPDATE_COMPLETE, changeText);
    			addElement(textInput);			
     
    			textInput.setFocus();
    		}
     
    		private function changeText(event:FlexEvent):void
    		{
    			data.accu_totale = TextInput(event.currentTarget).text;
    			retour = data.accu_totale;						
    		}			
     
    	}
    }
    Pour rappel, ma donnée une fois modifiée apparait parfois avec un alignement vertical un peu décallé vers le bas. Quelqu'un verrait il pourquoi ?

    Merci

  2. #2
    Membre émérite Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Par défaut
    Bonjour

    Peut-être ainsi pour réaffecter le style suite à modif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private function changeText(event:FlexEvent):void
    	{
    	data.accu_totale = TextInput(event.currentTarget).text;
    	retour = data.accu_totale;
    draw();	
    }
    C'est juste une hypothése. (?)

  3. #3
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

    merci pour l'hypothèse mais elle ne marche pas, elle fait même planter Flash (boucle infinie de création/destruction de TextInput).

    J'aurais dis à la base que le problème ne se situait pas dans l'itemEditor puisque le problème apparait sur le renderer de la cellule mais je suis contredis par le fait que si j'utilise le itemEditor par défaut pour mes 2 cellules utilisant mon itemEditor, la première cellule après modification présente un décalage puis après modification de la 2ieme cellule, ces 2 cellules s'alignent correctement. Avec mon itemEditor, mes 2 cellules restent mal disposées.

    C'est subtil comme comportement et je suis pas sur de bien expliquer

    EDIT qui a son, importance : si je mets

    dans mon itemEditor, bref n'importe quelle valeur le comportement est celui attendu. C'est donc probablement un problème d'encodage/formatage de mon objet data

  4. #4
    Membre émérite Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    ... C'est donc probablement un problème d'encodage/formatage de mon objet data...
    Possible.
    Dans ce cas, puisque plusieurs valeurs sont susceptibles d'être modifiées ( 2 dans ton cas), pourquoi ne pas remplacer "Object" par "ArrayCollection", dans tes lignes de codes. ( Les 3 )
    Just for test.
    Ensuite, je ne vois pas.

  5. #5
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

    pas possible a priori, je dois implementer IDataRenderer qui implemente ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     // Internal variable for the property value.
        private var _data:Object;
     
        // Make the data property bindable.
        [Bindable("dataChange")]
     
        // Define the getter method.
        public function get data():Object {
            return _data;
        }
     
        // Define the setter method, and dispatch an event when the property
        // changes to support data binding.
        public function set data(value:Object):void {
            _data = value;
     
            dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
        }
    le getter renvoie donc un objet

Discussions similaires

  1. Petit bug de compilation
    Par Chess0 dans le forum C++
    Réponses: 12
    Dernier message: 04/12/2005, 19h12
  2. Réponses: 1
    Dernier message: 29/11/2005, 17h32
  3. Petit bug.
    Par CCin dans le forum C
    Réponses: 15
    Dernier message: 12/10/2005, 12h08
  4. [RegEx] Petit Bug sur Expression Régulière
    Par Delphy113 dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2005, 20h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo