浏览 6286 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-28
产生这个问题的原因是: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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-08-28
Tim.now+url是可行的(除非你2个Div请求的chart url是一样的),更新插件是需要重起整个应用的,你检查一下是不是其他代码的原因。
|
|
返回顶楼 | |
发表时间:2008-08-28
Quake Wang 写道 Tim.now+url是可行的(除非你2个Div请求的chart url是一样的),更新插件是需要重起整个应用的,你检查一下是不是其他代码的原因。
这两个Chart是由同一个Controller生成,交给同一个View显示的,这样说来Url应该是一样的。。。 你说的“更新插件是需要重启整个应用”,是什么意思?关掉WEBrick再引导起来符不符合要求? |
|
返回顶楼 | |
发表时间:2008-08-28
我找到了一个不算优雅的做法解决了这个问题,我在Controller里,两次生成Chart的代码之间加入了一个消耗时间用的循环,然后,两个Chart就在浏览器里出现了。。。
希望听下大家更优雅的解决方案! |
|
返回顶楼 | |
发表时间: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里,显示都很正常。 |
|
返回顶楼 | |
发表时间: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个字符,而且位置相同)?? |
|
返回顶楼 | |
发表时间:2008-08-29
汗~~
一个字符不同hash也会不同,你可以尝试把其中一个图形的action name改一下。然后你在比较下view里面生成的ID。 怎么能生成一样的呢~~ 如果还能一样,我建议你把OFC的插件删了再装一次看看。前面我记得你提到你修改OFC里面那个生成的方法都不起作用。 |
|
返回顶楼 | |