代码之家  ›  专栏  ›  技术社区  ›  Jay

动态更新图例-动作脚本3

  •  0
  • Jay  · 技术社区  · 16 年前

    请阅读以下步骤以了解问题。

    1. 创建了包含两个数据系列的折线图。
    2. 将图表和图例附加到容器中。

    3. 有一个更新按钮。点击了按钮。

    4. 当我试图更新图例时,它仍然指向带有两个标签而不是三个标签的初始值。

    5. 我用来实现的代码(6)

    选项(1)

    选项(2)

    此[“containerId”].getChildByName(“legendName”).dataProvider=此[“containerId”].getChildByName(“chartName”)作为折线图;

    谢谢 杰伊

    2 回复  |  直到 16 年前
        1
  •  0
  •   James Fassett    16 年前

    大约一年前,我用Flex图表做了一些繁重的工作,它们可能是一个持续的挫折源。事实上,他们内心非常聪明,这导致很难对行为进行推理。

    我注意到的一件事是,有时当您更改数据时,它实际上可能需要几帧时间才能通过层次结构。即使你更新了 dataProvider 在与更新序列信息时位于同一帧的图例上,可能没有绑定到实例的正确版本,因为它将在几帧内更改。(即更改为 Series 是异步的,对 数据提供程序

    一个快速测试,看看这是否是你的问题,只是把黑客定时器到位。设置100毫秒左右,然后设置 数据提供程序 系列 系列 数据提供程序 . 这不是一个生产就绪的解决方案,但它至少会决定问题的性质。

    如果是你的问题(我怀疑但不确定),那么就开始寻找来自所有图表组件的事件。标志着新事物的事件 系列 被抽出来的可能来自 但你最终会找到的。祝你好运。


    此外,以下两者之间的区别:

    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 如果没有,它将抛出一个异常(事实上,如果它没有强制转换为 酒吧 ). 第二次( as )是因为当有合理的机会 不会是 酒吧 它不会抛出错误,而是返回 null

    由于这种行为,Adobe建议尽可能使用第一个表单。

        2
  •  0
  •   Taryn Frank Pearson    12 年前

    这是flex的一个主要问题:很难与AS3一起使用。。。最好使用MXML并创建绑定。。。问题可能会消失。。。


    编辑: 您应该创建一个类,如下所示:

    class Data {
        [Bindable(event="legendChanged")]
        public function get legend():LegendType {/*implementation*/}
        [Bindable(event="chartChanged")]
        public function get chart():ChartType {/*implementation*/}
        public function choseGraph(index:uint):void {
             //update state so the getters for chart and legend will return the right values
             this.dispatchEvent(new Event("legendChanged"));
             this.dispatchEvent(new Event("chartChanged"));
        }    
    }
    

    推荐文章