2010-03-30 4 views
0

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

 [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

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

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

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

+0

Спасибо за отличную проницательность, он помог обнаружить источник проблемы, я делал что-то вроде: var friendsSearchResults: ArrayCollection = model.friendsSearchResults; но это заставляло новую переменную просто указывать на одну и ту же, даже если бы я сделал: model.friendsSearchResults = friendsSearchResults; после этого он действительно не задавал модельную переменную. – Tam

Смежные вопросы