gpt4 book ai didi

javascript - rails 5 : refresh partial in another partial with AJAX update action

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:44 27 4
gpt4 key购买 nike

我有/views/layouts/_navigation.html.erb,其中生成了部分用户配置文件:

<nav class="navbar-default navbar-static-side" role="navigation">
<div class="sidebar-collapse">
<ul class="nav metismenu" id="side-menu">
<!-- Here we render user profile -->
<div id='userprofile'>
<%= render 'layouts/userprofile' %>
</div>
<!-- Here we render menu -->
<% cache "#{I18n.locale}_menu" do %>
<%= render 'layouts/menu' %>
<% end %>
</ul>
</div>
</nav>
<!-- Here we render modal window dialog -->
<%= render 'users/dialog' %>

/views/layouts/_userprofile.html.erb中我有这个:

<div class="dropdown profile-element">
<span>
<img alt="image" class="img-circle" src="<%= image_url 'profile_small.jpg' %>"/>
</span>
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
<span class="clear">
<span class="block m-t-xs">
<strong class="font-bold"><%= current_user.name %></strong><b class="caret"></b>
</span>
</span>
</a>
<ul class="dropdown-menu animated fadeInRight m-t-xs">
<li><a href=""><%= t('.sellerdash') %></a></li>
<li><a href=""><%= t('.buyerdash') %></a></li>
<li><%= link_to t('.profile'), current_user %></li>
<li><%= link_to t('.settings'), edit_user_path(current_user), remote: true %></li>
<li class="divider"></li>
<li><%= link_to t('.logout'), logout_path %></li>
</ul>
</div>

单击“设置”后,将打开模式窗口,可以编辑“用户设置”。 /views/users/update.js.erb 执行相同的工作,但在 User 表中:

$('#dialog').modal('toggle');
$('#user_<%= @user.id %>').replaceWith('<%= j render (@user) %>')

当用户设置更新时,我想刷新 _userprofile.html.erb 部分以显示新信息,例如用户名。

到目前为止,我认为我需要将此行添加到/views/users/update.js.erb

$('#userprofile').html('<%= j render 'layouts/userprofile', locals: {user: @user} %>')

但是它不起作用。

请问我该如何解决这个问题?谢谢!

更新

我的/controllers/users_controller.rb 中的更新操作如下所示:

def update
respond_to do |format|
if @user.update(user_params)
format.json { head :no_content }
format.js
else
format.json { render json: @user.errors.full_messages,
status: :unprocessable_entity }
end
end
end

我发现 userprofile.html.erb 仅在连续第二次尝试后才会刷新。基本上它不会第一次刷新,在第二轮中它会刷新必须在第一轮中渲染的值。一些奇怪的行为。 有人知道我的部分发生了什么吗?

最佳答案

作为第一个措施,我将首先检查请求是否作为 JS 触发。您可以在控制台中检查

还要注意在 JavaScript 代码中使用单引号

$('#userprofile').html("<%= j render 'layouts/userprofile', locals: {user: @user} %>")

注意我添加的双引号

我还假设你的 Controller 中有

respond_to do |format|
format.js
end

在这种情况下,不需要传递局部变量,因为局部变量可以直接访问它们

所以代码变成了

$('#userprofile').html("<%= j render 'layouts/userprofile' %>")

还要确保在控制台中您没有看到任何错误。 JavaScript 请求通常不会使前端崩溃,因此您不会在屏幕上看到错误。

希望这些有帮助

关于javascript - rails 5 : refresh partial in another partial with AJAX update action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42633096/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com