Около года назад я проделал тяжелую работу с диаграммами 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 рекомендует по возможности использовать первую форму.
person
James Fassett
schedule
26.08.2009