我有不同的标题,我想基于计时器循环,每次页面加载时都应该执行。目前,我有一次工作,但在第一次更改标题后停止。我对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);
}
正如我所说,这种方法很好但只旋转一次然后停止。
非常感谢任何帮助!
答案 0 :(得分:1)
这不是关于js,而是关于理解什么在何时何地运行。
如果您查看正在呈现的HTML,事情应该变得更加清晰。对escape_javascript
,render
的调用恰好发生一次:在呈现主页面加载期间对该字符串进行插值。所以第二次(和第三次,第四次,第五次......)时间rotate()运行它正在用完全相同的HTML替换标题。
假设您正在使用jquery,load方法可以执行此操作:
$('#header').load('/some/server/path')
当您回复此请求时,不要忘记在没有布局的情况下进行渲染。
最后,您确定要使用Ajax吗?您可以预先加载所有标头变体并使用JavaScript依次显示它们。 (有很多jquery循环或幻灯片插件正是这样做的)