我目前正在尝试优化在rails上的ruby中呈现页面。
我有一个问题,是否有办法制作页面,只有在点击与其关联的链接(href)时才会渲染另一页。
index.html.erb中的一些代码:
.....
.....
<h4>
<%= item.name %>
<br/><a href="#<%=itemt.id%>_item_modal">Details</a>
</h4>
<div id="<%=item.id%>_item_modal" class="modal fullscreen">
<div class="item-modal">
<%=render item%>
</div>
</div>
.....
.....
在上面的代码中,我使用的是模态。因此,单击链接时,_item.html.erb将显示在较小的页面中。类似于弹出窗口。
当加载index.html.erb时,_item.html.erb中的所有代码也将自动加载,并且由于
,所有内部查询都将被执行<%render item%>
码
我想要的是,我不希望index.html.erb也在_item.html.erb页面内呈现所有项目,除非我点击“详细信息”按钮。
<br/><a href="#<%=itemt.id%>_item_modal">Details</a>
我认为通过这样做,我可以在用户请求项目页面时节省一些时间,因为系统不需要检索所有尚未需要的信息。
你们能帮助我吗?
如果您需要其他信息,请与我们联系。
答案 0 :(得分:1)
你必须使用ajax才能实现这一目标。您可以创建一个具有特定ID的隐藏div,例如“模态”。
将你的h4还原为:
<h4>
<%= item.name %>
<br/>
= link_to 'Details', item_path(item), data: {remote: true}, item_details: true
</h4>
然后在您的项目控制器中,在show action上:
def show
# load the item
if params[:item_details]
respond_to {|format| format.js}
else
# do what you already do here
end
end
在项目视图文件夹中,创建一个文件show.js(.coffee):
$('#modal').html('<%= j(render partial: "item", object: @item) %>');
$('#modal').modal('show');
这只是想法,你必须使它与你的代码兼容。
答案 1 :(得分:0)
如果你想去ajax路线:
<h4>
<%= item.name %>
<br/>
<%= link_to "Details", item_path(item), remote: true %>
</h4>
然后在你的items_controller中:
def show
...
respond_to do |format|
format.js
end
end
然后创建视图“views / items / show.js”
$(body).append(<%= escape_javascript(render partial: "items/item_modal") %>);
...code to show modal...
...hook to remove modal when it is dismissed...
视图“views / items / _item_modal.html.erb”
<div id="<%=item.id%>_item_modal" class="modal fullscreen">
<div class="item-modal">
<%=render item%>
</div>
</div>