Pregunta

No estoy seguro de si estoy malentendido de la unión en Flex.Estoy usando el marco de Cairngorm.Tengo el siguiente componente con el código como:

        [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>

en el modelo de localizador:

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

En el interior del elemento representador hay un botón que llama a un comando y dentro de los resultados del comando hay una línea como esta:

model.friendsSearchResults = friendsSearchResults;

Colocar puntos de interrupción y paso a paso a través del código que he confirmado que este como se llama y la friendsSearchResults se actualiza.

A mi entender, si puedo actualizar un enlazable variable automáticamente debe volver a renderizar el s:DataGroup que tiene un objeto dataProvider de esa variable.

¿Fue útil?

Solución

No hay nada obviamente equivocado en el código de ejemplo.Se debe trabajar así que creo que hay un problema en otro lugar.

Yo recomendaría el establecimiento de un punto de ruptura donde el dataProvider se asigna y también donde model.friendsSearchResults se le asigna.Asegúrese de que ambos apuntan a la misma instancia del objeto.A continuación, el paso a través de la asignación de propiedad y el evento correspondiente.

Para realizar la depuración más fácil que usted puede cambiar mediante un evento con nombre en lugar de la predeterminada.Con el nombre de un evento, sólo los detectores de eventos interesados en su propiedad particular, se activan en lugar de los oyentes escuchando cualquier cambio de propiedad.Esto es más fácil de depurar y correr más rápido.Por ejemplo, cambie:

[Bindable]
public var results:ArrayCollection;

a

[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"));
}

Otra cosa a tener en cuenta es que los enlaces de ocultar ciertos errores como referencia nula excepciones.Ellos asumen que el valor de simplemente no está disponible todavía, y suprimir el error.Los pasos a través de la asignación y relacionados con los enlaces le ayudará a encontrar un problema como este.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top