Возникли проблемы с привязкой - PullRequest
0 голосов
/ 30 марта 2010

Я не уверен, неправильно ли я понимаю привязку во Flex. Я использую фреймворк Cairngorm. У меня есть следующий компонент с кодом вроде:

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

в локаторе модели:

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

Внутри средства визуализации элементов есть кнопка, которая вызывает команду, а внутри результатов команды есть строка, подобная этой:

model.friendsSearchResults = friendsSearchResults;

Установив точки останова и пошагово пройдя код, я подтвердил, что вызывается подобное и обновляется friendsSearchResults.

Насколько я понимаю, если я обновлю привязываемую переменную, она должна автоматически перерисовать s: DataGroup, у которой есть dataProvider этой переменной.

1 Ответ

1 голос
/ 30 марта 2010

Нет ничего явно неправильного в примере кода.Это должно работать, поэтому я думаю, что есть проблема в другом месте.

Я бы порекомендовал установить точку останова, где назначен dataProvider, а также где model.friendsSearchResults.Убедитесь, что они оба указывают на один и тот же экземпляр объекта.Затем перейдите к назначению свойства и соответствующему событию.

Чтобы упростить отладку, вы можете переключиться на использование именованного события вместо значения по умолчанию.С именованным событием срабатывают только слушатели событий, заинтересованные в вашем конкретном свойстве, а не слушатели, прослушивающие любое изменение свойства.Это легче отладить и будет работать быстрее.Например, измените:

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

Еще одна вещь, о которой следует помнить, это то, что привязки скрывают определенные ошибки, такие как исключения нулевой ссылки.Они предполагают, что значение просто еще не доступно и подавляют ошибку.Выполнение задания и связанных привязок поможет найти такую ​​проблему.

...