我需要一些关于如何在没有实际加载页面的情况下使用Jquery/Ajax更新页面上的div的指导。在我提出这个问题之前,我会提供一些必要的信息。在rails中,使用Jquery/Ajax更新div
我有两个型号:
Scoreboard
型号(has_many :teams
)Team
型号(belongs_to的scoreboard
)
在scoreboard#show
页,我已经使部分显示全部@scoreboard.teams
。
的部分显示了所有在如下面的代码的详细单独的div团队:
<div class ="team-list" id="team_<%=team.id%>">
<div class= "boxin1"><%= team.name %></div>
<div class= "boxin2"><%= team.win %></div>
<div class= "boxin2"><%= team.loss %></div>
<div class= "boxin2"><%= team.tie %></div>
<span class= "boxin3 btn btn-primary"><%= link_to "Edit", edit_scoreboard_team_path(@scoreboard, team), remote: true %> </span>
<span class= "boxin3 btn btn-primary"><%= link_to "Del", [@scoreboard, team], remote: true, method: :delete, data: { confirm: "Are you sure you want to delete the team?" } %>
</div>
现在我的问题涉及编辑按钮,在点击,一个Ajax请求,其要求,带来了一个表格编辑一个团队,然后表格在提交时调用团队控制器中的更新方法。为了进一步澄清,这里是有关的代码:
团队控制器方法编辑和更新:
def edit
@scoreboard = Scoreboard.find(params[:scoreboard_id])
@team = @scoreboard.teams.find(params[:id])
respond_to do |format|
format.html {redirect_to scoreboard_url(@team.scoreboard_id)}
format.js
end
end
def update
@scoreboard = Scoreboard.find(params[:scoreboard_id])
@team = @scoreboard.teams.find(params[:id])
if @team.update_attributes(team_params)
respond_to do |format|
format.html {redirect_to scoreboard_url(@team.scoreboard_id)}
format.js
end
else
render 'edit'
end
end
下面是edit.js.erb和update.js.erb文件和代码说明澄清什么是他们发生的事情:
edit.js.erb
$("#team_<%[email protected]%>").hide();
$("#team_<%[email protected]%>").after("<%= j render 'teamedit'%>");
因此,点击edit_path链接按钮后,编辑团队的div将被隐藏,并在其后立即生成一个表格。
update.js.erb
$("#edit_team_<%[email protected]%>").hide();
$("#team_<%[email protected]%>").load("scoreboards/show.html.erb"); #help needed here
$("#team_<%[email protected]%>").show();
现在,当更新控制方法表单提交后调用,形式是隐藏与jQuery,我想重新加载组的div我躲到之前,然后用它的更新值显示它。
我觉得像.load()jquery方法将与新编辑的值刷新div相关,但它不起作用。总之,edit.js.erb工作正常,但update.js.erb由于代码中的第二行不起作用。 div没有被更新的值刷新。任何人都可以提供一些不同方法的指导,或让我知道我在做什么错了?
编辑:
另一个相关项目。Team_Params方法在团队控制器中:
private
def team_params
params.require(:team).permit(:name, :win, :loss, :tie)
end
谢谢您的回复。我按照你的指示做了,表格被隐藏起来,div重新显示。但是,当div显示时,它仍然具有@team的旧值,而不是输入到编辑表单中的值。还有什么我可能做错了? – kpaul
我唯一能想到的就是你的'team_params'方法。你也可以展示它吗? – dimakura
私人在这里没有问题。它在别的地方。很难说。如果你可以分享你的项目,那么识别出什么问题会很快。 – dimakura