使用setTimout进行标头旋转时遇到问题Rails 2.3.9

时间:2012-05-24 22:43:48

标签: javascript ruby-on-rails

我有不同的标题,我想基于计时器循环,每次页面加载时都应该执行。目前,我有一次工作,但在第一次更改标题后停止。我对javascript不太满意,如果有人能指出我正确的方向,我会很感激。

以下是我目前的情况。

在lib / Rotator.rb中:

class Rotator
 def self.header_rotator(number)
   partials = ["header", "header2", "header3", "header4", "header5"]
   random_header = partials[number]
 return random_header
 end
end

然后在application.html.haml的标题部分我有:

var start_rotate = setTimeout(rotate, 5000);
     function rotate() {
      remote_function(:url => {:action})
      $("#header").replaceWith('#{escape_javascript( render :partial => "shared/#{Rotator.header_rotator(rand(5))}")}')
      start_rotate = setTimeout(rotate, 5000);
     }

正如我所说,这种方法很好但只旋转一次然后停止。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

这不是关于js,而是关于理解什么在何时何地运行。

如果您查看正在呈现的HTML,事情应该变得更加清晰。对escape_javascriptrender的调用恰好发生一次:在呈现主页面加载期间对该字符串进行插值。所以第二次(和第三次,第四次,第五次......)时间rotate()运行它正在用完全相同的HTML替换标题。

假设您正在使用jquery,load方法可以执行此操作:

$('#header').load('/some/server/path')

当您回复此请求时,不要忘记在没有布局的情况下进行渲染。

最后,您确定要使用Ajax吗?您可以预先加载所有标头变体并使用JavaScript依次显示它们。 (有很多jquery循环或幻灯片插件正是这样做的)