1

我目前正在尝试优化在 ruby​​ on rails 中呈现页面。

我有一个问题,有没有办法制作一个页面,只在单击与其关联的链接(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>

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

你们能帮帮我吗?

如果您需要其他信息,请告诉我。

4

2 回答 2

1

您必须使用 ajax 来实现这一点。您可以创建一个具有特定 id 的隐藏 div,例如“modal”。

将您的 h4 还原为:

<h4>
  <%= item.name %>
  <br/>
  = link_to 'Details', item_path(item), data: {remote: true}, item_details: true
</h4>

然后在您的项目控制器中,在显示操作上:

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');

这只是想法,您必须使其与您的代码兼容。

于 2013-05-03T08:04:40.860 回答
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>
于 2013-05-03T08:08:29.213 回答