0

我有不同的标题,我想根据每次加载页面时都应该执行的计时器来循环。目前我有一次工作,但在第一次更改标题后停止。我对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);
     }

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

任何帮助将不胜感激!

4

1 回答 1

1

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

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

假设您使用的是 jquery,则 load 方法可以这样做:

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

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

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

于 2012-05-24T23:12:56.433 回答