渲染页面轨道,模态

时间:2013-05-03 07:45:41

标签: ruby-on-rails optimization modal-dialog render

我目前正在尝试优化在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>

我认为通过这样做,我可以在用户请求项目页面时节省一些时间,因为系统不需要检索所有尚未需要的信息。

你们能帮助我吗?

如果您需要其他信息,请与我们联系。

2 个答案:

答案 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>