Возникли проблемы с привязкой
-
23-09-2019 - |
Вопрос
Я не уверен, что неправильно понимаю привязку во 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"));
}
Еще следует иметь в виду, что привязки скрывают определенные ошибки, например исключения нулевых ссылок.Они предполагают, что значение просто еще недоступно, и подавляют ошибку.Выполнение задания и связанных с ним привязок поможет обнаружить подобную проблему.