Около 1 года назад я проделал тяжелую работу с диаграммами Flex, и они могут быть постоянным источником разочарования. Дело в том, что они очень умные внутри, что приводит к очень трудным рассуждениям о поведении.
Одна вещь, которую я заметил, заключалась в том, что иногда, когда вы меняете данные, на самом деле может потребоваться несколько кадров, чтобы они проскользнули по иерархии. Это означает, что даже если вы обновите dataProvider
для легенды в том же фрейме, что и при обновлении информации о серии, вы можете не связываться с правильной версией экземпляра, поскольку она изменится через несколько кадров. (т.е. изменение на Series
является асинхронным, а изменение на dataProvider
является синхронным).
Один быстрый тест, чтобы увидеть, если это ваша проблема, это просто установить таймер взлома. Установите его на 100 мс или около того, а затем установите dataProvider
позже - надеюсь, когда изменения в Series
дойдут до необходимого свойства. Другая идея состоит в том, чтобы использовать вторую кнопку, и, как только вы визуально увидите новый Series
, используйте эту кнопку, чтобы вызвать назначение легенд dataProvider
. Это не готовое к производству решение, но оно по крайней мере определит природу проблемы.
Если это ваша проблема (в которой я подозреваю, но не уверен), тогда начинайте искать события, которые происходят от всех компонентов диаграммы. Событие, которое сигнализирует о том, что новый Series
был нарисован, может происходить из в любом месте , но вы в конце концов найдете его. Удачи.
Также разница между:
var foo:Bar = Bar(obj); // if !(obj is Bar) throw Error
и
var foo:Bar = obj as Bar; // if !(obj is Bar) return null
- это первое, лучше всего, если вы уверены, что obj
приведёт к Bar
и выдаст исключение, если это не так (на самом деле это будет ошибкой, если он не приведен к Bar
). Второй (as
) предназначен для случая, когда есть разумный шанс, что obj
не будет Bar
, и он не выдаст ошибку, а вместо этого вернет null
.
Из-за этого поведения Adobe рекомендует использовать первую форму, когда это возможно.