Question

Je ne sais pas si je suis mal compris la liaison dans Flex. J'utilise le cadre Cairngorm. Je le composant suivant avec le code suivant:

        [Bindable]
        var _model:LalModelLocator = LalModelLocator.getInstance();
....
<s:DataGroup    dataProvider="{_model.friendsSearchResults}"
                     includeIn="find"
                     itemRenderer="com.lal.renderers.SingleFriendDisplayRenderer">
            <s:layout>
                <s:TileLayout orientation="columns"    requestedColumnCount="2" />
            </s:layout>         </s:DataGroup>

dans le localisateur de modèle:

[Bindable]
public var friendsSearchResults:ArrayCollection = new ArrayCollection();

A l'intérieur du rendu d'élément il y a un bouton qui appelle une commande et à l'intérieur des résultats de la commande il y a une ligne comme ceci:

model.friendsSearchResults = friendsSearchResults;

Mettre des points de rupture et parcourant le code, je confirme que cela comme est appelé et les friendsSearchResults est mis à jour.

Pour ma compréhension si je mets à jour une variable bindable il devrait automatiquement réengendrer les s: DataGroup qui a une dataProvider de cette variable.

Était-ce utile?

La solution

Il n'y a rien évidemment mal dans l'exemple de code. Il devrait fonctionner donc je pense qu'il ya un problème ailleurs.

Je recommande la fixation d'un point d'arrêt où le dataProvider est attribué et aussi où model.friendsSearchResults est affecté. Assurez-vous qu'ils sont tous deux pointant vers la même instance d'objet. Ensuite, l'étape par l'attribution de la propriété et l'événement correspondant.

Pour rendre plus facile le débogage, vous pouvez passer à l'aide d'un événement nommé au lieu de la valeur par défaut. Avec un événement nommé, les écouteurs d'événement uniquement intéressés par votre propriété particulière sont déclenchées au lieu des écouteurs d'écoute pour tout changement de propriété. Cela est plus facile à déboguer et courir plus vite. Par exemple, le changement:

[Bindable]
public var results:ArrayCollection;

à

[Bindable("resultsChanged")]
private var _results:ArrayCollection;
public function get results():ArrayCollection {
    return _results;
}
public function set results(value:ArrayCollection):Void {
    _results = value;
    dispatchEvent(new Event("resultsChanged"));
}

Une autre chose à garder à l'esprit est que les liaisons cachent certaines erreurs comme des exceptions de référence nulles. Ils prennent la valeur est tout simplement pas encore disponible et supprimer l'erreur. Parcourant les missions et les liaisons connexes vous aidera à trouver un problème comme celui-ci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top