论坛首页 编程语言技术论坛

使用Open Flash Chart同时显示多图遇到的问题

浏览 6286 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-08-28  
    在应用中,我打算使用Open Flash Chart来处理统计数据的图形化显示。当我把一个柱状图和一个饼图放在同一个View里同时显示的时候,只有排在后面(以View中的代码顺序)Chart会在浏览器中正确出现。我看了一下Open Flash Chart官方网站上关于多个Chart在一个View里显示的教程,发现这个问题有一个叫Nick的人遇到过,也向教程的编写者提出来了。
    产生这个问题的原因是:Chart在View中是放在一个Div里显示的,而该插件使用的是将当前系统时间进行Hash后,作为Div的ID的做法。当处理器速度较快时,两个Chart的Hash值是一样的,也就是两个Div的ID是一样的,浏览器自然显示后面一个Div的内容。作者修正了算法,在进行Hash的时候使用了Timw.now+url的做法,该办法解决了Nick的问题,但我使用的是修正后的插件,这个问题仍然存在。
    于是我继续修改插件中算法,在生成用于Hash的原始字符串里加入随机数,甚至加入一个消耗时间的循环,但问题依然存在。(不知道是不是我的机器处理器真的足够快 ) 其间我把WEBrick关掉了重新启动了一次,为的是让服务器重新装入代码运行(包括插件),但不知道此方法是否能保证插件代码被重新装载运行?!
    请教Javaeye的各位达人,有什么办法可以解决这个问题。谢谢!
def open_flash_chart_object(width, height, url, use_swfobject=true, base="/")
  url      = CGI::escape(url)
  # need something that will not be repeated on the same request
  # need the gsub at the end to first get the last newline (which could simply be done with chomp)
  # and second get the newlines in the middle of the encoded string
  special_hash = Base64.encode64(Time.now.to_f.to_s + url.to_s).gsub(/\n/,"")
  obj_id   = "chart_#{special_hash}"  # some sequencing without all the work of tracking it
  div_name = "flash_content_#{special_hash}"
  protocol = "http" # !request.nil? ? request.env["HTTPS"] || "http" : "http"

  return %[
    <div id="#{div_name}"></div>
  (以下省略部分代码)
end
   发表时间:2008-08-28  
Tim.now+url是可行的(除非你2个Div请求的chart url是一样的),更新插件是需要重起整个应用的,你检查一下是不是其他代码的原因。
0 请登录后投票
   发表时间:2008-08-28  
Quake Wang 写道
Tim.now+url是可行的(除非你2个Div请求的chart url是一样的),更新插件是需要重起整个应用的,你检查一下是不是其他代码的原因。


这两个Chart是由同一个Controller生成,交给同一个View显示的,这样说来Url应该是一样的。。。
你说的“更新插件是需要重启整个应用”,是什么意思?关掉WEBrick再引导起来符不符合要求?
0 请登录后投票
   发表时间:2008-08-28  
我找到了一个不算优雅的做法解决了这个问题,我在Controller里,两次生成Chart的代码之间加入了一个消耗时间用的循环,然后,两个Chart就在浏览器里出现了。。。
希望听下大家更优雅的解决方案!
0 请登录后投票
   发表时间:2008-08-28  
  
def index
    @graph1 = open_flash_chart_object(600,300,"/test/graph1")
    @graph2 = open_flash_chart_object(600,300,"/test/graph2")
end

这是作者那个把两个图放在一个view里的代码,不同图形的请求url是不同的啊,一个/test/graph1另一个是/test/graph2,不会得到同样的hash,lz的代码是什么样的,怎么能得到同样的hash?

我自己放了三四个图在一个view里,显示都很正常。
0 请登录后投票
   发表时间:2008-08-28  
def show_result
    
    .
    # prepare data for two chart
    .

    @graph_bar = open_flash_chart_object(600,300,"/show_result/graph_code_for_bar")
    @graph_pie = open_flash_chart_object(600,300,"/show_result/graph_code_for_pie")

 end

def graph_code_for_bar
   	...
end

def graph_code_for_pie
	...
end

 

 

我就是这样写的,难道是因为Action的名字比较长而不同的字符数太少(只有3个字符,而且位置相同)??

0 请登录后投票
   发表时间:2008-08-29  
汗~~
一个字符不同hash也会不同,你可以尝试把其中一个图形的action name改一下。然后你在比较下view里面生成的ID。

怎么能生成一样的呢~~

如果还能一样,我建议你把OFC的插件删了再装一次看看。前面我记得你提到你修改OFC里面那个生成的方法都不起作用。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics