Вопрос

Я не уверен, что неправильно понимаю привязку во 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;

Поставив точки останова и пройдя по коду, я подтвердил, что этот метод вызывается и результаты поиска друзей обновляются.

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

Это было полезно?

Решение

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

Я бы рекомендовал установить точку останова, где 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"));
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top