Pergunta

Não tenho certeza se estou entendendo mal a ligação no Flex.Estou usando a estrutura Cairngorm.Eu tenho o seguinte componente com 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>

no localizador de modelo:

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

Dentro do renderizador do item existe um botão que chama um comando e dentro dos resultados do comando existe uma linha como esta:

model.friendsSearchResults = friendsSearchResults;

Colocando pontos de interrupção e percorrendo o código, confirmei que esse like é chamado e o friendsSearchResults é atualizado.

No meu entender, se eu atualizar uma variável vinculável, ela deverá renderizar automaticamente novamente o s:DataGroup que possui um dataProvider dessa variável.

Foi útil?

Solução

Não há nada obviamente errado no exemplo de código.Deve funcionar, então acho que há um problema em outro lugar.

Eu recomendaria definir um ponto de interrupção onde o dataProvider é atribuído e também onde model.friendsSearchResults é atribuído.Certifique-se de que ambos estejam apontando para a mesma instância do objeto.Em seguida, percorra a atribuição de propriedade e o evento correspondente.

Para facilitar a depuração, você pode passar a usar um evento nomeado em vez do padrão.Com um evento nomeado, apenas os ouvintes de eventos interessados ​​em sua propriedade específica são acionados, em vez de quaisquer ouvintes que escutam qualquer alteração de propriedade.Isso é mais fácil de depurar e será executado mais rapidamente.Por exemplo, altere:

[Bindable]
public var results:ArrayCollection;

para

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

Outra coisa a ter em mente é que as ligações ocultam certos erros, como exceções de referência nula.Eles presumem que o valor simplesmente ainda não está disponível e suprimem o erro.Percorrer a tarefa e as ligações relacionadas ajudará a encontrar um problema como este.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top