У меня есть действие по обновлению контроллера, которое по существу работает в двух частях.Существует первоначальное создание / обновление, затем обратный вызов after_action, который возвращается и добавляет дополнительные данные в запись.Эти дополнительные данные - это то, что должно быть легко доступно для Javascript.
По этой причине я не могу просто .append () изначально созданный объект в div, поскольку на этом начальном «первом проходе»Этап, он еще не имеет данных after_action.
Чтобы обойти это, я использую действие jQuery .load ().Это обновляет рассматриваемый div с новым содержимым, и полный объект (с дополнительными атрибутами данных) готов к работе.
ОДНАКО!Что я замечаю, так это то, что после отправки Ajax в фоновом режиме сервер по существу обрабатывает полную перезагрузку страницы, перерисовывая полную энчиладу, а не останавливается только на div, который я передаю в функцию .load ().
Как отключить Turbolinks во время / сразу после этого процесса, чтобы он не перезагружал всю страницу?
Из документации Turbolinks:Кажется, data-turblinks="false"
должен добиться цели, но мне пока не повезло.
Есть идеи, где я ошибаюсь?Что-нибудь еще, что я должен попробовать?
Заранее спасибо, дайте мне знать, если есть какие-нибудь другие фрагменты кода, которые вы хотели бы увидеть!
.html.erb
<%= button_tag "", type: 'submit', class: "btn btn-lg btn-default glyphicon glyphicon-ok above-interaction-barrier",
id: "crop-submit-button-#{image.id}", data: { turbolinks: false, no_turbolink: true } do %>
# Nesting a link_to just in case turbolinks requires it to be an actual link element (??)
<%= link_to "", data: { turbolinks: false, no_turbolink: true} %>
<% end %>
контроллер
after_action :set_crop_attributes_for_crop_image, only: [:update, :create]
def set_crop_attributes_for_crop_image
if image_params[:crop_x].present? && @crop_image.parent_image_id.present?
@crop_image.crop_x = image_params[:crop_x]
@crop_image.crop_y = image_params[:crop_y]
@crop_image.crop_w = image_params[:crop_w]
@crop_image.crop_h = image_params[:crop_h]
@crop_image.save!
end
end
.js
$('form').submit(function(event) {
$(this)
.off('ajax:beforeSend')
.on('ajax:beforeSend', function() {
$body.addClass('loading');
});
$(this)
.off('ajax:success')
.on('ajax:success', function() {
cropperInstance.clear();
// Show/Hide div under the radar so lazyloading plugin kicks in
$('#selection-confirmation-highlights')
.removeClass('above-interaction-barrier')
.attr('z-index', '-500');
$('#selection-confirmation-highlights').show();
$('#selection-confirmation-highlights').hide();
$('#selection-confirmation-highlights')
.addClass('above-interaction-barrier')
.removeAttr('z-index');
$body.removeClass('loading');
});
});
.js.erb
$('#selection-confirmation-highlights').load(location.href+" #selection-confirmation-highlights>*");