好的,我将假设您的滑块是某种需要表结构的 javascript 小玩意儿。因此,您必须弄清楚的第一件事是如何将行插入现有表中。
假设您在初始页面加载后生成以下 HTML,其中只有一个图像:
<table id='slider'>
<tr>
<td class='si'>
<img.... >
</td>
</tr>
</table>
您需要能够通过 javascript 在该表中插入新行。我必须假设您此时正在使用 jquery。这是一些jQuery:
$('#slider:last-child').append("<tr><td>Hi!</td></tr>");
如果您使该 jquery 执行,则您的 DOM 将包含:
<table id='slider'>
<tr>
<td class='si'>
<img.... >
</td>
</tr>
<tr><td>Hi!</td></tr>
</table>
再次执行相同的 javascript,然后:
<table id='slider'>
<tr>
<td class='si'>
<img.... >
</td>
</tr>
<tr><td>Hi!</td></tr>
<tr><td>Hi!</td></tr>
</table>
这是 jquery 代码的关键部分,但它在哪里,你如何使它正确?
好吧,调用该 jquery 代码需要在每次获取下一个图像的 AJAX 调用之后发生。因此,您必须解决的下一个问题是如何通过 AJAX 一次一个地遍历所有图像?
这将涉及要在浏览器中维护的 JavaScript 变量,该变量是所有图像的索引。至少,您必须在页面加载时捕获最大数量的图像。你可以这样做:
显示.html.erb:
<script type='text/javascript'>
$(document).ready(function() {
var maximage = <%= @maximage %>;
var curimage = 0;
});
</script>
为了让它工作,你必须设置@maximage。
应用程序/控制器/pages_controller.rb:
class PagesController < ApplicationController
before_filter :prep_images , :only => [:show]
def prep_images
@maximage = @page.slider_items.length
end
end
因此,当 dom 就绪事件触发时,由于 erb 扩展,您的 HTML 将包含一个脚本部分,其中包含:
var maximage = 12;
var curimage = 0;
假设有 12 张图像。
在这一点上,我不得不提到命名空间冲突,maximage 很可能是您使用的其他 javascript 库中使用的变量。如果您发现是这种情况,则必须解决此问题,但我假设没有冲突。
好的,我已经构建这篇文章有一段时间了。如果您认为我在正确的道路上,请告诉我,我将填写剩余的详细信息。