Я использую Link_to для добавления некоторого контента на свою страницу с помощью ajax, но я только хочу, чтобы пользователь делал это один раз. Я делаю это, заменив ссылку на новый элемент html в файле js.erb. Это все работает отлично выглядит следующим образом:Rails link_to disable_with, а затем удалить ссылку
<%= link_to(expand_task_subset_user_path(user, li_id: li_id, span_id: span_id, user_tasks_to_expand_sym: user_tasks_to_expand_sym),
{:method => :get, remote: true, 'data-mahi-link-type'=>'expand_task_subset'}) do %>
<i class="glyphicon glyphicon-plus-sign" title="Expand this branch"></i>
<% end %>
js.erb фрагмент файла, который заменяет ссылку, созданную выше:
$("#<%[email protected]_id%> > a:has(i)").replaceWith("<i class=\"glyphicon glyphicon-minus-sign\" title=\"Collapse this branch\"></i>")
Я заметил, что сегодня есть можно было нажать на ссылку дважды, прежде всего, в Файл js.erb был завершен, что означало, что он дважды вставлял другой контент. Я думал, что очевидный способ исправить это, чтобы добавить disable_with так:
<%= link_to(expand_task_subset_user_path(user, li_id: li_id, span_id: span_id, user_tasks_to_expand_sym: user_tasks_to_expand_sym),
{:method => :get, remote: true, 'data-mahi-link-type'=>'expand_task_subset', data: { disable_with: 'loading...' }}) do %>
<i class="glyphicon glyphicon-plus-sign" title="Expand this branch"></i>
<% end %>
Проблема (я думаю), что disable_with изменяет HTML временно и селектор JQuery $("#<%[email protected]_id%> > a:has(i)")
не находит подходящих элементов для замены , Я попытался отключить ссылку в качестве первого оператора в файле js.erb, но если вы быстро, вы все равно можете победить его и дважды щелкнуть. Есть ли другой способ отключить ссылку сразу после нажатия?
Update: disable_with делает заменить содержимое «а» тега, так что я просто изменил мой селектор JQuery быть:
$("#<%[email protected]_id%> > a[data-mahi-link-type='expand_task_subset']")
вместо того, чтобы искать для ребенка «я» тегов и теперь все прекрасно работает!
К сожалению, это does't похоже на работу. Я где-то читал, что пульт: true останавливает jquery от unbinding/die. Мне, возможно, придется изучить это дальше, чтобы найти обходной путь ... –