2010-12-14 117 views
1

Dans Flex 4, j'ai un composant Spark List avec des moteurs de rendu d'éléments. Je voudrais choisir un article dans la liste en cliquant dessus, et le désélectionner aussi, en cliquant sur le même article sélectionné. Comme un interrupteur marche/arrêt.Flex 4 - Sélectionnez et désélectionnez le même élément dans <s:List> avec un mousedown

Mon article Renderer les états suivants:

<s:states> 
<s:State name="normal"/> 
<s:State name="hovered"/> 
<s:State name="selected"/> 
</s:states> 

donc j'ai essayé d'ajouter un écouteur d'événement click pour le moteur de rendu d'article avec:

private function selectUnSelect():void { 
if (currentState == 'selected') currentState = 'normal'; 
else currentState = 'selected'; 

}

avec un comportement maladroit ... où l'élément reste sélectionné même après un nouveau clic dans l'état sélectionné. Pensez à utiliser le composant List sans la commande (sur Mac) ou le bouton Contrôle sur Windows.

+0

Serait-il possible d'ajouter une propriété à votre fournisseur de données sous-jacente qui indiquerait si l'élément a été sélectionné ou non? Quelque chose comme: public var isSelected: Boolean = true? –

Répondre

1

Plutôt que de faire en sorte que le rendu d'élément définisse son état, je voudrais opérer sur la liste elle-même. Demandez à votre outil de rendu d'envoyer un événement lorsque vous cliquez dessus et que les données du rendu d'élément sont incluses, puis ajoutez un écouteur pour cet événement (dans un composant qui étend List ou dans le composant contenant votre liste). Vous pouvez ensuite vérifier si les données correspondent à l'un des éléments sélectionnés de votre liste. Si ce n'est pas le cas, ajoutez l'élément aux éléments sélectionnés. Si c'est le cas, supprimez-le des éléments sélectionnés. J'espère que cela pourra aider.