ajaxStart/turbolinks:click не срабатывает при переходе по ссылке с пульта: true

пытаясь показать счетчик всякий раз, когда нажимается ссылка с удаленным значением true, пробовал оба способа, используя turbolinks:events и события ajaxStart/ajaxStop. Событие turboinks:load запускается успешно, а событие :click — нет. и ajaxStart, и ajaxStop не работают.

Использую rails 6, turbolinks 5, webpacker. ссылки генерируются в очень обычном примере:

<%=link_to 'Documents', documents_path, remote: true %>

этот код находится в <head> </head> файла application.html.erb

    <script type="text/javascript">
    
    
    $(document).on("turbolinks:load", function(){
     alert('turbolinks load works');
     //$(".sk-cube-grid").hide();
    });
    
    
    
    
      $(document).on("turbolinks:click", function(){
       alert('this doesnt work');
      //$(".sk-cube-grid").show();
    });
   
    </script>

код, использующий ajaxStart/ajaxStop, альтернативно размещенный также в application.html.erb

$(document).ajaxStart(function(){
  alert('started ajax - doesnt work');
});

$(document).ajaxStop(function(){
  alert('stopped ajax - doesnt work');
})

ИЗМЕНИТЬ

изменил обработку события на следующее:

var page_loaded = function() {
  $(".sk-cube-grid").hide();
};


$(document).on("read page:load", page_loaded);

$(document).on("ajax:send", "a", function(xhr){
      $('.sk-cube-grid ').show()
}).on("ajax:complete", "a", function(data, status, xhr) {
  $(".sk-cube-grid").hide();
});

Этот код показывает () .sk-cube-grid, когда ajax: запускается, но не скрывается, когда :complete или когда :success.


person Kamal Agbaria    schedule 24.05.2021    source источник


Ответы (1)


Установка параметра remote: true указывает Rails использовать UJS (ненавязчивый javascript ) для обработки ajax. Это не обрабатывается Turbolinks, поэтому событие Turbolinks, которое вы слушаете, не запускается. У вас есть два варианта: используйте UJS так, как есть но прослушайте правильное событие: ajax:success или удалите remote: true и позвольте Turbolinks обработать его (и прослушайте turbolinks:load, как вы это делаете сейчас)

person Joel Blum    schedule 24.05.2021
comment
Придерживаясь удаленного: true, заметил, что не все link_to с удаленным: true fire ajax: успех, только методы для «нового» действия. - person Kamal Agbaria; 25.05.2021
comment
может быть, какие-то ваши действия терпят неудачу? все они должны запускать ajax:success. В любом случае, это ответ на ваш вопрос? - person Joel Blum; 25.05.2021
comment
Нет, к сожалению, ajax:success и ajax:complete не запускаются при нажатии на ссылку remote: true. Я попытался удалить удаленный: правда, даже если турбоссылки включены, щелчок загружает страницу полностью вместо рендеринга файла .js.erb, который обрабатывает модальное окно (в моем случае). - person Kamal Agbaria; 25.05.2021
comment
Я отредактировал вопрос, используя немного другой код. Оцените, если вы посмотрите. - person Kamal Agbaria; 26.05.2021