为了账号安全,请及时绑定邮箱和手机立即绑定

Rails - 在 ajax 之后使用部分更新 bootstrap popover 内容

Rails - 在 ajax 之后使用部分更新 bootstrap popover 内容

慕神8447489 2023-12-19 21:32:19
我正在使用引导弹出窗口构建通知功能。当用户单击通知时,它会通过 ajax 调用将该通知标记为已读。在 ajax 成功时,我想用更新的版本替换弹出窗口的内容。这是我到目前为止所拥有的:$(document).ready(function(){  $("#notificationsBell").popover({    'title' : $('.notifications-title-header').html(),    'html' : true,    'placement' : 'left',    'content' : $(".notifications-list").html()  }); });$('#notificationsBell').off("click").on("click", function() {  $("#notificationsBell").popover('toggle');})$(document).on("click", ".notif-popup-container", function() {  // 1. get correct id for clicked notification  var notifId = $(this).attr("id");  // 2. Update the notification to be read and show update  $.post(    "/notifications/read",    { notif_id: notifId },  ).done(function(data) {    $('#notifUnreadCount').html(data.unread_notifs);      // 3. Replace html content of hidden div with updated notifications  $('.notifications-list').html("<%= j (render partial: 'notifications/partials/test_partial') %>");      // 4. Set popover content to be that div's html  var popover = $('#notificationsBell').data('bs.popover');  popover.config.content = $('.notifications-list').html();})# what is originally stored in the popover <div style="display:none" class="notifications-list">  <%= render 'notifications/partials/popover_notifications' %></div># _popover_notifications.html.erb# this is rendered twice, once above and once on ajax success<% unread_notifications = Notification.unread_count(current_user) %><% if unread_notifications.eql? 0 %>    No notifications to display! You are up to date.<% else %>    <% notifs = current_user.notifications.where(read_at: nil).order("created_at DESC") %>    <% notifs.each do |notif| %>        </div>    <% end %><% end %>此内容通过部分显示。然而,这就是问题出现的地方。虽然我期望ajax成功回调中的部分在ajax成功时渲染,但最近了解到部分的渲染首先由服务器完成(甚至在任何js运行之前),然后是结果被传回 javascript。因此,两个部分都在页面加载时呈现,这意味着我无法再在 ajax 成功后通过部分渲染动态设置弹出窗口内容。我的问题是,有没有办法解决这个问题,让我能够动态渲染部分内容,而不是在页面加载时将其填充到 js 中?或者如果没有,可能是一种完全不同的方法——我对任何想法持开放态度。谢谢。
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

您可以像这样从控制器中获取部分内容:


class TestController < ApplicationController

  def render_partial


    notification_id = params[:notification_id]


    # Fetch notification data

    notification = Notification.find(notification_id)


    # Return partial with new notification data

    render partial: 'notifications/partials/test_partial', locals: {:notification => notification}

  end

end

然后附加 JS 中的响应:


$('.notifications-list').append(resp)


查看完整回答
反对 回复 2023-12-19
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信