使用 setTimout 进行标题旋转 Rails 2.3.9 时出现问题

Trouble using setTimout for header rotation Rails 2.3.9

本文关键字:问题 Rails setTimout 标题 旋转 使用      更新时间:2023-09-26

我有不同的标题,我想根据每次加载页面时应执行的计时器进行循环访问。目前我的工作一次,但在第一次更改标题后停止。我不太擅长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

然后在应用程序.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);
     }

正如我所说,这工作正常,但只旋转一次然后停止。

任何帮助将不胜感激!

这与其说是关于 js,不如说是关于了解什么在何时何地运行。

如果您查看正在渲染的 HTML,事情应该会变得更加清晰。对escape_javascript的调用,render只发生一次:当该字符串在主页加载的渲染过程中值时。所以第二次(以及第三次,第四次,第五次...)次rotate()运行它正在用完全相同的HTML替换标头。

假设你使用的是jquery,load方法可以做到这一点:

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

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

最后,你确定要使用Ajax吗?您可以预先加载所有标头变体,并使用JavaScript依次显示它们。(有许多jQuery Cycle或slideshiw插件正是这样做的)