Flex: дополнительная метка в ButtonBarButton - PullRequest
0 голосов
/ 05 декабря 2011

Я пытаюсь расширить ButtonBarButton, чтобы включить дополнительную метку, которая показывает количество обновлений для соответствующего поля в стеке просмотра (который является dataProvider панели вкладок).

Я могу получить дополнительную метку (названную индикаторной меткой) для чтения начального значения из данных, но я не могу заставить ее автоматически обновляться, как фактический атрибут «метка».Насколько я понимаю, вы можете связываться с объектом данных, но это не так.

Поле, которое используется в стековом представлении, имеет атрибут _indicator


[Bindable]
public var _indicator:String;

То, что я знаю, корректно обновляется, потому что я вижу, что оно обновляется в окне (с которым также связана метка).Кажется, он просто не обновляет кнопку buttonbar.

Мой класс buttonbarbutton имеет следующее (где init () вызывается в creationComplete


[SkinPart]
public var indicatorLabel:spark.components.Label;

private function init():void
{
 indicatorLabel = data._indicator;
 addEventListener("dataChange", onDataChangeHandler);
}

private function onDataChangeHandler(e:Event):void
{
 trace(e.target.label + ' ' + e.target._indicator);
}

Я предполагаю, что мои предположения касаются либо привязки данных, либоДанные объекта, которые передаются на кнопку, неверны. Любая помощь приветствуется.

1 Ответ

1 голос
/ 06 декабря 2011

Я ответил на вопрос здесь всего несколько дней назад, который тесно связан с этим вопросом.Это немного более абстрактно, но оно должно отвечать и вашему.Взгляните на Flex: связь между скином и моделью данных?

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

нижняя строка: вы можете рассмотреть commitProperties() подход настройка производительности , следовательно, вы не должны учитывать это, пока не столкнетесь с проблемой производительности.

с другой стороны с архитектурной точки зрения: такой подход позволяет более чистое разделение компонента и его оболочки.С подходом hostComponent / binding можно сказать, что скин знает слишком много: он должен знать о своем компоненте хоста и его свойствах.В то время как другой позволяет вам иметь полностью «тупую» кожу.Итак, еще раз, я склонен использовать связывание с одноразовыми компонентами и commitProperties() с многократно используемыми.

В конце концов, это все компромисс (потому что «чистый» способ сложнее и требует больше работы)и вы должны принять взвешенное решение для каждой конкретной ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...