如何根据单击块中的哪个项目来渲染不同版本的分部
How can I render different versions of a partial based on which item in a block I click on?
我有一个带有许多记录的模型Painting
。我正在打印所有这些,对于每一个,我都想附加一些jQuery,这样点击每个绘画就会渲染一个带有大版本绘画的局部。
<div id="viewer"></div>
<% Painting.all.each_with_index do |painting, index| %>
<%= image_tag(painting.path, id:"painting"+index%>
<% @painting = painting %>
<script type="text/javascript">
$("#painting<%=index%>").click(function() {
$("#viewer").html("<%= escape_javascript(render 'partial') %>");
});
</script>
<%end%>
_部分html.erb
<%= image_tag(@painting.path, class:"large-painting") %>
<!-- more code -->
问题是,每次循环都会重置值@painting
,到最后它等于最后一次绘制。因此,无论我单击哪幅绘画,最后一幅都将始终是在局部中渲染的那幅。
有人能想出一种方法,让部分渲染的绘画与我点击的绘画相对应,而不为每一个单独编写jQuery吗?
您可以将每个图像的大版本的URL添加为图像上的自定义属性,然后用用户单击的任何图像对应的URL更新查看器引用的URL吗?
类似于:
$("#painting<%=index%>").click( function(){
$(Viewer_Image_Element).prop('src', $(this).prop('custom_URL_property'))
});
或者,您可以创建一个新的控制器操作(或对现有控制器操作的新响应),该操作通过将图像渲染为部分来进行响应。每当有人点击图像时,您可以使用$.ajax调用控制器操作,并将图像ID作为参数与请求一起发送。服务器将使用param正确地呈现分部,然后在响应中将其发回。然后简单地将html插入到查看器中。如果这是你想走的路线,我可以添加一些示例代码。
这也意味着用户在第一次加载页面时不需要下载每个图像的大版本。这可能是一件好事,也可能不是一件好事。
相关文章:
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 单击F5时如何停止页面加载
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 单击jquery清除输入值
- 单击按钮以等待单击按钮
- 在单击href链接的同时下载文件
- 单击顶部导航时如何进行向下滚动效果(向下滑动).
- 使图像在单击时展开到不大于浏览器
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 如何在单击复选框后调用控制器方法
- 单击页面上的链接后高度发生变化
- 使用jquery在单击时在单元格中输入值
- 将纯文本URL转换为可单击链接
- 如何根据单击块中的哪个项目来渲染不同版本的分部
- Jquery 切换/单击在早于 9 的 Safari 版本中不起作用
- 如何在单击“;保存”;,然后提交表格的最终版本
- IE 9在展开缩略图网格版本中单击失败
- 在IE 8及更低版本上单击后,样式锚定标签(<a>)将消失