• [原]ExtJS与FusionChart 在ExtJS框架中使用FusionChart的一点问题


    1. 拉伸模式scaleMode

    下面展示不同的scaleModeIEFirefox中的差别:

     

    IE

    FF

    exactFit

    showAll

    noScale

    noBorder

    可以看到FF中很好的表现出了不同拉伸模式的效果,而IE中则不明显。测试时的FusionChart尺寸用100%设置,DIV容器用100%设置。

    为了保证在flash中设置的字体与实际相符,应该使用noScale。否则字体会在伸缩的同时被缩放。

    2. 关于缩放

    如果FusionChart用百分比设置尺寸,可以通过设置它的容器尺寸来改变大小。

    下面是在noScale模式下的缩放截图:

    IE

    FF

    Firefox中的表现很奇怪,FusionChart所在的DIV容器(图中蓝框)无法准确设置高度。在FF中观察节点的信息,高度参数正确却不能正常显示。

    如果多次点击缩放,ExtJS就能正常的控制FusionChart 窗口的尺寸。scaleMode为其它值时,缩放Flash就不会被剪裁。

    @这里要说两点:

    1、使用FusionChart的应用,由于要显示出预设的字体大小,所以Flash就不应该支持拉伸。所以要么创建FusionChart后,不再改变窗口(DIV)的大小;要么FusionChartscaleMode就应该为noScale。如果需要缩放,可以用Ext.get( elId ).remove()把原容器直接移除,再重创建新尺寸的FusionChart

    2、 FusionChart的尺寸尽量显式设置,不使用百分比。

     

    3Extjs面板切换

    ExtJS中使用TabPanel切换面板时,IEFF的表现是不同的。根据经验,这两种浏览器需要分别处理。

    IE中的表现和预想一样,切换到其它面板再切回来,该显示什么就显示什么,也不会有闪烁问题。切换回来后只显示最后一次设置的setDataXXX值。

    而在FF中,每次FusionChart被隐藏(或随着其它面板隐藏)后再显示时,Flash需要刷新。刷新会有一次闪烁,把画面恢复到第一次调用setDataXML, setDataJSONsetDataURL时所设置的参数(见下一节的源码分析)。所在在使用FF时,需要在切回时响应Panelactivate事件,调用setDataXXX方法给Flash设值(会有两次闪烁)

     

    4设置数据

    如果按demo的流程:

     

    之后就不再用setDataXXX方法设置数据就没有问题,同时也不存在切换问题。如果希望动态刷新FusionChart数据,通过参数组成URL时问题就出来了。

    察看FusionCharts.js源码:

     

    上面是setDataURL的源码,setDataXMLsetDataJSON的结构与此相似。可以看到第一次设置数据时,参数是放到一个运行时参数表中。而后再设置时,会通过回调函数调用FusionChart.setDataXXX,同时传参进去。所以,如果在Render前两次调用setDataXXX方法,第二次调用就会报错。因为回调的对象(Flash)还没有画(创建)出来。

    再看getSWFHTML方法:

     

    上面第9,10行,第19,20行代码,把variable参数用”&”拼接后设置为flashflashvars参数。

    那么,假设在demo的代码后紧跟setDataXXX设值(这个很有可能,先创建对象,然后使用对象),会怎么样?

    答案是:会报与chartObj为空有关的错误

    这是因为这个时候浏览器可能还没完成Flash的加载,第二次调用setDataXXX时,需要让Flash回调setData方法,而Flash对象不存在就会出错。

    有时也会报__flash__addCallback相关的错误:

     

    错误提示应该是没有__flash__addCallback方法。这个方法在Flash加载后会自动创建,没完成加载时没有这个方法。

    设置数据的最后解决办法是在调用setDataXXX时,用Ext.util.TaskRunner延迟1秒执行,再没发现问题。不过不确定到应用环境后,会不会由于网络等原因再次出现。这个问题目前没找到太好的解决办法。


    原文链接 http://www.cnblogs.com/basecn/archive/2011/06/09/3264308.html

    作者:井(basecn@163.com)

  • 相关阅读:
    使用Docker搭建nginx环境
    使用Docker搭建apache环境
    字符编码-字库表,字符集,字符编码
    go中的sync.pool源码剖析
    JAVA基础语法
    Linux 文件目录管理
    c++ 学习之常用时间函数一览
    MySQL Innodb 中的锁
    MySQL 索引与 B+ 树
    MySQL 表分区操作详解
  • 原文地址:https://www.cnblogs.com/basecn/p/3264308.html
Copyright © 2020-2023  润新知