Я тщательно следовал этим инструкциям: https://github.com/plataformatec/simple_form/wiki/Bootstrap-component-helpers
Но проблема, которую я продолжаю получать, заключается в том, что всякий раз, когда моя страница загружается, я получаю эту ошибку JS в консоли браузера:
Uncaught TypeError: undefined is not a function
Вокруг этой линии:
$('body').tooltip({ selector: "[data-toggle~='tooltip']"});
Я считаю, что проблема заключается в .tooltip
, потому что инициализатор, похоже, работает. Я могу это сказать, потому что сгенерированный html имеет атрибуты data-toggle
, необходимые для селектора JS.
Я использую драгоценный камень bootstrap-sass
.
Вот мой инициализатор simple_form_bootstrap
:
SimpleForm.setup do |config|
config.wrappers :bootstrap, tag: 'div', class: 'control-group', error_class: 'error' do |b|
b.use :html5
b.use :placeholder
b.use :label
b.use :tooltip
b.wrapper tag: 'div', class: 'controls' do |ba|
ba.use :input
ba.use :error, wrap_with: { tag: 'span', class: 'help-inline' }
ba.use :hint, wrap_with: { tag: 'p', class: 'help-block' }
end
end
# Truncated for brevity
config.default_wrapper = :bootstrap
end
Вот мой инициализатор simple_form_components.rb
:
module SimpleForm
module Components
module Tooltips
def tooltip
unless tooltip_text.nil?
input_html_options[:rel] ||= 'tooltip'
input_html_options['data-toggle'] ||= 'tooltip'
input_html_options['data-placement'] ||= tooltip_position
input_html_options['data-trigger'] ||= 'focus'
input_html_options['data-original-title'] ||= tooltip_text
nil
end
end
def tooltip_text
tooltip = options[:tooltip]
tooltip.is_a?(String) ? tooltip : tooltip.is_a?(Array) ? tooltip[1] : nil
end
def tooltip_position
tooltip = options[:tooltip]
tooltip.is_a?(Array) ? tooltip[0] : "right"
end
end
end
end
SimpleForm::Inputs::Base.send(:include, SimpleForm::Components::Tooltips)
Я назвал это так в моем _form.html.erb
:
<%= f.input :title, placeholder: "Enter Title", tooltip: ["bottom", "Must be as it appears in the BANK STATEMENT"] %>
Это мой post.js
— тоже урезан для краткости:
$(document).ready(function () {
$('#count').click(counter);
$('#post_body, #post_title').on('change keydown keypress keyup blur focus', counter);
$('body').tooltip({ selector: "[data-toggle~='tooltip']"});
});
Это верхняя часть моего application.js
:
//= require jquery
//= require jquery_ujs
//= require jquery.turbolinks
//= require bootstrap
//= require bootstrap/dropdown
//= require bootstrap/modal
//= require bootstrap/tooltip
//= require turbolinks
//= require_tree .