Rails: make (ссылка на «пример», «#», удаленный: true) обход (ответить на … format.js )

#javascript #ruby-on-rails-5

#javascript #ruby-on-rails-5

Вопрос:

У меня следующая проблема:

На моей странице у меня есть 2 удаленные ссылки. Первый:

 <p><%= link_to "Description", "#", remote: true, id: "desc-link" %></p>
  

это простая ссылка, чтобы скрыть описание объекта:

 $(document).on "ready page:load", ->
  $("section.object").on "click", "#desc-link",  ->
    $("#object-desc").fadeToggle()
  

Второй — вызов Ajax:

 <a type="button" class="btn btn-default", 
  href='/users/<%= Object.find(object_to_display).user.id %>/objects',
  data-remote="true" id='object-link'>Test</a>
  

и контроллер должен делать что-то, когда на него нажимают:

 def objects

  ...

  respond_to do |format|
    format.html { render "users/show_objects" }
    format.js { STUFF }
  end
end
  

Моя проблема в том, что каждый раз, когда я использую первую ссылку для включения или выключения описания, также происходит то, чего не должно быть. Как я могу избежать возникновения проблем при нажатии на первую ссылку?

Ответ №1:

Первая ссылка не нужна remote: true . Настройка, которая заставляет jquery_ujs пытаться автоматически отправлять ссылку через ajax при нажатии на нее. Удаление remote: true должно предотвратить запуск objects действия с помощью ссылки переключения.

Отдельно ваш click обработчик должен либо вернуть false , либо вызвать e.preventDefault() , чтобы браузер не пытался перейти по ссылке (по сути, вы говорите браузеру «игнорируйте этот щелчок, я его обработал»):

 $(document).on "ready page:load", ->
  $("section.object").on "click", "#desc-link", (e) ->
    $("#object-desc").fadeToggle()
    e.preventDefault() // <-- prevents following the link