2009-11-02 12 views
0

J'ai une classe PresentationModel AS qui contient toutes les valeurs utilisées dans SomeView.mxml. La classe entière du modèle est liable et la propriété de modèle dans la vue est également lisible. Cependant, je ne peux pas injecter le modèle dans la vue en utilisant la balise PropertyInjector:Injecter un objet créé par OjbectBuilder en tant que propriété à afficher

- INFO: Data binding will not be able to detect assignments to model 

Est-ce que quelqu'un avec des données Flex familier de liaison et Mate me donner un coup de main? Merci beaucoup!

MainEventMap.mxml

<EventHandlers type="{FlexEvent.INITIALIZE}"> 
    <ObjectBuilder generator="{PresentationModel}" registerTarget="true"> 
     <Properties dispatcher="{scope.dispatcher}"/> 
    </ObjectBuilder> 
</EventHandlers> 


<Injectors target="{SomeView}" debug="true"> 
    <PropertyInjector targetKey="model" source="{PresentationModel}" /> 
</Injectors> 

Snippet de PresentationModel.as

[Bindable] 
public class PresentationModel extends EventDispatcher 
{ 
    public var dispatcher:IEventDispatcher; 

    //.....other variables and functions 
} 

Snippet de SomeView.mxml

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="518" height="562" > 
<mx:Script> 
    <![CDATA[ 

     //...... all the imports 

     [Bindable] 
     public var model:OSGiBrokerConsoleModel; 

     // ......other variables and functions 
    ]]> 
</mx:Script> 

    // ..... actual view components 

</mx:Canvas> 
+0

À quoi ressemble le reste de PresentationModel? – Stiggler

Répondre

0

Vous ne pouvez pas lier à une classe. Rendre une classe lisible signifie que tous les membres de cette classe seront liés, mais pas la définition elle-même.

Vous devez créer une fonction membre (getter/setter) pour le modèle de présentation qui renvoie les données que vous souhaitez utiliser comme source. Ensuite, vous devez également créer une instance de PresentationModel que vous pouvez utiliser pour la liaison. Ainsi, plutôt que de vous lier à PresentationModel.data, vous devez lier myPM.data.

1

Vous pouvez ignorer ce message d'information en toute sécurité. Ce message est généralement affiché lorsque vous avez un PropetyInjector avec une source et une clé source, où la propriété définie par "sourceKey" n'est pas lisible, nous voulons donc être sûrs que la valeur actuelle de cette propriété sera la une seule cible sera obtenue (lorsque la propriété n'est pas lisible, la valeur est copiée et aucune liaison n'est établie). Cela peut ou peut ne pas être ce que vous voulez.

Dans ce cas, il n'y a pas de sourceKey, car vous ne voulez pas vous lier à une propriété spécifique de la source. Au lieu de cela, vous voulez passer le PM entier à la vue. Pour cette raison, vous ne voulez pas établir une liaison, envoyez simplement la valeur à la vue une fois.

Dans les cas où il n'y a pas de sourceKey ou lorsque vous envoyez simplement une valeur unique (par exemple: lorsque vous envoyez une constante), le message peut être ignoré.