2010-12-02 20 views
4

Existe-t-il vraiment une méthode simple pour effectuer une liaison de données bidirectionnelle sur des propriétés de types non correspondants? Dans l'exemple ci-dessous, je tentais de lier deux propriétés à l'autre: l'un de type String (text propriété de s:TextInput) et l'autre de type Number (bar propriété de Foo)Liaison de données bidirectionnelle Flex 4 sur les propriétés de types non correspondants

package com.example 
{ 
    public class Foo 
    { 
     [Bindable] public var bar:Number; 
    } 
} 

<?xml version="1.0" encoding="utf-8"?> 
<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 

    xmlns:ex="com.example.*" 
> 
    <fx:Declarations> 
     <ex:Foo id="foo" /> 
    </fx:Declarations> 
    <s:TextInput text="@{foo.bar}" /><!-- error at this line --> 
</s:Application> 

Tentative de compiler ces résultats de code l'erreur suivante:

1067: Implicit coercion of a value of type String to an unrelated type Number.

Je comprends pourquoi l'erreur se produit, mais je me demandais si je suis tout simplement ignorant quelque chose (peut-être une sorte de métadonnées Flex 4) qui permettrait une tentative de conversion entre la t wo types et lancer une erreur d'exécution si une telle conversion échoue ...

Répondre

0

J'ai fini par utiliser un data renderer pour mon objet, qui est aveugle au type de données. Donc, je suppose que la seule solution est de lancer vers un Object ou * et les méthodes d'appel que vous "connaissez" sont là. Bien que cela puisse créer des erreurs d'exécution qui auraient normalement été détectées au moment de la compilation, je ne vois pas de meilleure solution.

0

La seule chose que j'ai pu trouver est de changer le type de propriété à barFoo à * (étoiles est une carte sauvage, ce qui empêche la vérification de type lors de la compilation). Mais j'aimerais beaucoup savoir s'il y a un moyen de garder le type ...