谢谢你的时间!
我手上有一些报告数据,我想在网上提供这些数据。 HTML的视图将分为左侧部分和右侧部分两部分。左侧部分的树视图由报告名称组成。在右边部分显示了报告的内容。
我想要实现的是当我点击左侧部分的报告名称时,它会调用Action
中的Controller
,并将报告名称作为参数传递。 Action
将从数据库中获取数据并表示右侧部分中的数据。现在我被困在如何实现这种观点上。
我在互联网上搜索了很多内容,发现Frameset
,Partials
或Ajax
可能具备此功能。因为我以前从未开发过Web应用程序,也是Rails的新用户。那么有人可以给我一些建议或建议吗?
我已经知道的事情:
我使用Frameset
来完成这样的视图。但我发现它需要很多.html
个文件,所有这些.html
文件都是静态的。许多人根本没有建议。
然后我用Google搜索Partials
。但似乎Partials
没有称之为行动。它直接将_partials.html.erb
加载到主视图中。此外,我如何控制布局?使用CSS
?
我从未使用Ajax
。
答案 0 :(得分:4)
如果您希望在一个报告与另一个报告之间进行流畅,无缝的转换,则应同时使用AJAX和Partials。
它的工作方式如下:
我会在这里放一些代码来说明它是如何工作的:
控制器:
def index
reports = Report.all
if params[:report_id]
reports = Report.find(params[:report_id]
end
respond_to do |format|
format.html
format.js { render :template => "update_reports" }
end
end
update_reports.js.erb(与报告视图位于同一文件夹中):
$('#report_viewer').html('<%= escape_javascript render :partial => "report_detail" %>');
在您看来:
<div style=float:left>
<ul>
<li><%= link_to "Some report", "#", :class => "ajax" %></li>
</ul>
</div>
<div style=float:right id="report_viewer">
<%= render :partial => "report_detail" %>
</div>
<script type='text/javascript'>
$(document).ready(function() {
$(".ajax").click(function(e) {
$(this).ajax("your route to the action");
}
});
</script>
我认为基本上就是这个,现在让我解释一下:
:format => "js"
来执行此操作
答案 1 :(得分:3)
这是一个非常开放的问题,所以不要逐字逐句地回答这个问题,而只是作为指导。
应用/视图/布局/ reports.html.erb 强>
<!DOCTYPE html>
<html itemscope itemtype="http://schema.org/">
<head>
# omitted
</head>
<body>
<div id="body-container">
<div id="left-column">
<ul id="reports-list">
<% for report in @reports %>
<li><%= link_to report.name, report %></li>
<% end %>
</ul>
</div>
<div id="right-column">
<%= yield %>
</div>
</div>
</body>
</html>
应用/控制器/ reports_controller.rb 强>
class ReportsController < ApplicationController
before_filter { @reports = Report.all }
def index
end
def show
@report = Report.find(params[:id])
end
def edit
@report = Report.find(params[:id])
end
def new
@report = Report.new
end
def update
# omitted
end
def create
# omitted
end
def destroy
@report = Report.find(params[:id])
end
end
<强>的routes.rb 强>
YourApp::Application.routes.draw do
resources :reports
root to: "reports#index"
end
这样可以达到使用后只需使用rails的效果,当然添加ajax可以增加更好的用户体验。