Ruby on Rails 6. 使用带有 Ajax 的 Bootstrap 4 工具提示

Posted

技术标签:

【中文标题】Ruby on Rails 6. 使用带有 Ajax 的 Bootstrap 4 工具提示【英文标题】:Ruby on Rails 6. Using Bootstrap 4 tooltips with Ajax 【发布时间】:2020-11-07 15:27:41 【问题描述】:

我已经通过 Webpacker 设置了 Bootstrap 4、Jquery 和 Popper.js。

application.js 文件 (app/javascript/packs/application.js):

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")

import "bootstrap"

document.addEventListener("turbolinks:load", () => 
  $('[data-toggle="tooltip"]').tooltip()
  $('[data-toggle="popover"]').popover()
)

environment.js 文件 (config/webpack/environment.js):

const  environment  = require('@rails/webpacker')
const webpack = require('webpack')

environment.plugins.append('Provide',
  new webpack.ProvidePlugin(
    $: 'jquery',
    jQuery: 'jquery',
    Popper: ['popper.js', 'default']
  )
)

environment.config.set('resolve.alias', jquery: 'jquery/src/jquery');

module.exports = environment

在我开始使用 Ajax 之前,我的工具提示可以正常工作。 使用 Ajax 更改页面后,工具提示停止工作。

我尝试将 $('[data-toggle="tooltip"]').tooltip() 代码插入到我的 js.erb 文件中,但我总是在浏览器控制台:

VM26:4 Uncaught TypeError: $(...).tooltip is not a function
    at <anonymous>:4:30
    at processResponse (rails-ujs.js:283)
    at rails-ujs.js:196
    at XMLHttpRequest.xhr.onreadystatechange (rails-ujs.js:264)
(anonymous) @ VM26:4
processResponse @ rails-ujs.js:283
(anonymous) @ rails-ujs.js:196
xhr.onreadystatechange @ rails-ujs.js:264

页面视图的一部分,带有使用工具提示的元素:

...
      <td class="pl-2">
        <%= link_to @card, method: :delete, data:  confirm: "You sure?" , 
            remote: true do %>
          <i class="fas fa-times" id="deleteIcon" 
             data-toggle="tooltip" title="Delete"></i>
        <% end %>
      </td>
...

我怎样才能让它工作?

【问题讨论】:

我刚刚注意到使用分页链接时工具提示停止工作(它们也通过'remote:true'进行分页)。 我遇到了同样的问题,我通过 Ajax 加载的任何部分都无法从我的 app/javascript/packs/application.js 中找到内容。你有想过吗? 我刚开始使用 'tippy.js' 而不是 Bootstrap 工具提示。 【参考方案1】:

对于以后阅读本文的任何人,这就是我能够解决问题的方法。

我必须销毁(处置)所有引导工具提示并重新创建它们。 你可以在你的 ajax 成功中调用它。在我的例子中,我使用刺激反射和变形页面,所以我在 finalizeReflex 回调中调用它。

$('[data-toggle="tooltip"]').tooltip('dispose');
$('[data-toggle="tooltip"]').tooltip();

显然是修复工具提示的一种老套方法,但我只能做到这一点。

【讨论】:

以上是关于Ruby on Rails 6. 使用带有 Ajax 的 Bootstrap 4 工具提示的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on rails 5.2 - 带有活动存储的背景图像

Ruby on Rails,带有对象方法的表单助手

如何在 Ruby on Rails 中使用带有 form.select 的 jquery .click() 方法?

带有 Ruby on Rails 的 Jquery Datepicker 不起作用

不允许用户在 ruby​​ on rails 中提交带有空字段的表单

带有回形针的 If 语句 | Ruby on Rails