我对使用AJAX呈现页面的适当性感到有点困惑。首先,我将解释我正在尝试做什么,然后解释我的逻辑。
我有一个任务列表rails app我正在制作。创建任务后,我希望创建的任务在索引页面上显示基于其优先级的颜色代码。 High的任务为红色,Medium的任务为橙色,Low为绿色。要做到这一点,我知道我需要jQuery来添加.css或addClass方法,但我很困惑如何做到这一点。在上一个问题中,用户微薄告诉我,我需要将控制器中的信息提供给我的priority.js.erb文件,其中包括:
$(document).ready(function(){
if (<% @task.importance == "Low" %>) {
$("td").addClass("green");
} else if(<% @task.importance == "Medium" %>) {
$("td").addClass("orange");
} else {
$("td").addClass("red");
}
});
我知道控制器需要提供它,因为我的priority.js.erb文件因为@task不存在而中断。但这是我没有得到的东西。我如何实现这一点以及我需要哪些文件。我知道AJAX通常用于不需要页面刷新的功能,例如在博客上评论等等,但我想要的东西需要页面刷新。我需要有人点击new.html.erb,创建一个转到我的控制器的任务,做这样的事情:
def create
@task = Task.new(task_params)
respond_to do |format|
format.html do
redirect_to tasks_path, notice: "Task created!"
end
format.json do
render json: @task
end
end
end
然后刷新index.html页面。我需要一个单独的index.js.erb文件吗?
或者我使用AJAX完全错误?我甚至需要使用它吗?我只是非常困惑,因为我不确定需要做什么。如果你们需要详细说明或提供更多信息,请告诉我,我会编辑问题。我真的想让这个功能发挥作用。 THX。
答案 0 :(得分:2)
你不需要任何AJAX就可以了。正如您在上面的评论中提到的,您的new
表单将任务信息发布到TasksController内的create方法。
在TasksController create
方法中:
def create
@task = Task.new(task_params)
if @task.save
respond_to do |format|
format.html do
redirect_to tasks_path, notice: "Task created!"
end
# you probably don't need this, at this time (but it doesn't hurt)
format.json do
render json: @task
end
end
end
end
请务必使用@task.save
保存任务,因为原始帖子中的控制器代码中缺少该任务。
然后,在您的TasksController index
视图(app/views/tasks/index.html.haml
或app/views/tasks/index.html.erb
)中,您可以执行以下操作(使用HAML作为我的视图语言):
- @tasks.each do |task|
- case task.importance.titleize
- when 'Low'
%tr.green
- when 'High'
%tr.red
# the above assumes you want to apply a background color to an entire table row
%td= task.name (etc.)
在某些样式表中:
.green { background-color: #SOMEHEX; }
.red { background-color: #SOMEOTHERHEX; }
当您的索引页面呈现,显示所有请求的任务时,您的HAML或ERB索引视图将根据每个任务的重要性属性在您的表行上输出一个类。通过在样式表中定义类,表中的行将以正确的颜色显示。
由于您在Web应用程序中使用基本的请求 - 响应方法,因此您不需要需要 AJAX。
希望有助于您前进!