Рельсы, турболинки и спиннер

Я пытаюсь заменить текстовую ссылку счетчиком при нажатии. У меня есть это:

$(document).on('page:fetch', function(e) {
  $('.spinner').replaceWith( "<img src='<%= asset_path('layout/spinner.gif') %>'>" );
});

Но очевидно, что все ссылки с классом .spinner получают спиннер. Я хочу заменить только ссылку нажатой и только ЕСЛИ у нее есть класс spinner.

Какие-либо предложения?


person jriff    schedule 14.12.2013    source источник
comment
Позвольте мне посмотреть, правильно ли я понимаю: при нажатии на ссылку вы хотите, чтобы она была заменена счетчиком?   -  person Roberto Poo    schedule 14.12.2013
comment
Да! Ссылка, по которой щелкнули (та, которая вызвала страницу: fetch).   -  person jriff    schedule 14.12.2013
comment
И эти ссылки находятся внутри раздела страницы, который выбирается?   -  person Roberto Poo    schedule 14.12.2013
comment
Нет — они находятся на странице со ссылкой: 1. Нажмите на ссылку 2. Замените текст ссылки на счетчик 3. Получите новую страницу   -  person jriff    schedule 14.12.2013


Ответы (2)


У вас будет некоторый код, который запускается как для событий «page:load», так и для событий ready, чтобы они работали для полной загрузки страницы и загрузки страницы Turbolinks. Приведенный ниже код добавит атрибут «data-click» со значением true на «.spinner», по которому был сделан щелчок.

#inside both the ready and 'page:load' events
$('.spinner').on('click', function(e) {
  $(this).attr('data-clicked', true);
});

Приведенный ниже код будет искать '.spinner' с атрибутом data-clicked со значением true и применять к нему изображение счетчика.

$(document).on('page:fetch', function(e) {
  $('.spinner[data-clicked="true"]').replaceWith( "<img src='<%= asset_path('layout/spinner.gif') %>'>" );
});

Дайте мне знать, если это поможет.

person Gjaldon    schedule 16.12.2013
comment
Боюсь, это не так. Ничего не произошло. Я думаю, что содержимое обработчика события клика не срабатывает. Выполнение JS на странице останавливается до того, как его можно будет выполнить. - person jriff; 17.12.2013
comment
@jriff только что обновил мой ответ другим подходом. - person Gjaldon; 17.12.2013
comment
ДА! Это сделало это (но вы должны изменить щелчок по данным на щелчок по данным в верхнем фрагменте кода). - person jriff; 18.12.2013
comment
Можете ли вы сказать мне, почему это работает, когда мой подход не работает? Я действительно не понимаю, почему есть существенная разница. - person jriff; 18.12.2013
comment
Теперь я понимаю - это способ получить ссылку, по которой щелкнули, без использования объекта события (у которого нет никакой информации о триггере для события...) - person jriff; 18.12.2013
comment
Я отредактировал свою опечатку на «нажатие данных». И да, это в точку. :) - person Gjaldon; 18.12.2013
comment
Большое спасибо за ваш ответ - это действительно очень помогло. Наслаждайтесь щедростью :) - person jriff; 18.12.2013

Используйте событие on click, чтобы изменить ссылки с классом spinner, чтобы при нажатии на них они превращались в счетчик:

$('.spinner').on("click", function() {
  $(this).replaceWith( "<img src='<%= asset_path('layout/spinner.gif') %>'>" );
});

Затем будут изменены только те, которые были нажаты.

person Roberto Poo    schedule 14.12.2013
comment
Боюсь, это не сработает. Я попробовал (невероятно, тот же самый код, который вы придумали). Следующая страница загружается до замены содержимого. Я думаю, что Turbolinks делает что-то за кулисами. Код, который я вставил в свой вопрос, работает - счетчик отображается перед изменением страницы. Но это влияет на все ссылки, которые не были целью. - person jriff; 14.12.2013