1

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

Я не ищу how to refresh the whole page - это кажется довольно тяжелым. Я также не спрашиваю о polling для внесения изменений или используя что-то вроде Faye, чтобы сохранить страницу в синхронизации. Хотя любой из этих методов будет работать, я специально спрашиваю, возможно ли это с turbolinks, поскольку я новичок в этой функции и узнаю, что он может сделать.

ответ

2

Я думал об этом еще немного, и понял, что я мог бы иметь очень простое решение:

скрытая ссылка на текущую страницу

link_to 'current page', params, id: 'refresh_page_link', style: 'display:none;' 

Крошечный бит coffeescript, чтобы вызвать щелчок по этой ссылке каждые 5 секунд.

reload_periodically = -> 

    setTimeout (-> 
    $('#refresh_page_link')[0].click(); 
    return 
), 5000 # 5 seconds 

$(document).ready(reload_periodically) 
$(document).on('page:load', reload_periodically) 

Это приводит к странной вспышке на странице при каждой перезагрузке. Ясно, что есть лучшие способы сделать это, чтобы не было вспышки. Я просто хотел узнать больше о турбовинках.

+0

Это нехорошее решение, если вы поместите этот javascript внутри тела страницы. Когда turbolinks перезагружает содержимое тела, таймер не удаляется, но добавляется новый. В результате получается несколько таймеров (по одному для каждой перезагрузки), каждый триггерный клик и новый запрос. Запросы отменены в javascript, и только последний проходит, но на стороне сервера каждый запрос принимается и обрабатывается. – Montas

+0

@Montas - это хороший момент, спасибо! Но вы правы, это ужасное решение, и не одно, которое я бы ввел в производство, с или без многократных перезагрузок :) –

0

Я думаю, вы задаете неправильный вопрос

Turbolinks предназначается для того, когда вы переключение между видами - это помогает ограничить количество запросов к серверу:

Turbolinks делает следующие ссылки в вашем веб-приложении быстрее. Вместо того, чтобы позволить браузеру перекомпилировать JavaScript и CSS между каждым изменением страницы, он сохраняет текущий экземпляр страницы жив и заменяет только тело и титул в голове


опрос

Что вы действительно ищете "живой" функциональность:

  • Ajax Опрос (как правило, с SSE в)
  • WebSockets

Rails работает на структуру HTTP, то есть вы отправить запрос, он отвечает. Проблема заключается в том, что Rails не позволяет генерировать запрос со стороны сервера. Технологии, такие как ActionController::Live был создан, чтобы исправить это, но это отрывочный

Я бы рекомендовал использовать службу под названием Pusher

Это pub/sub tech, работает, давая вам в ваших JS в eventListener, в основном «прослушивания» в любые обновления с вашего сервера. Вы можете публиковать обновления через Rails' Pusher gem:

#app/assets/javascripts/application.js.coffee 
    pusher = new Pusher("*************", cluster: 'eu') 

    channel = pusher.subscribe("private-user-#{gon.user}") 
    channel.bind "multi_destroy", (data) -> 
    # do your stuff here 

    #app/controllers/message.rb 
    def send_message 
     public_key = self.user.public_key 
     Pusher['private-user-' + public_key].trigger('message_sent', { 
      message: "Message Sent" 
     }) 
    end 
+0

Мне было интересно, можно ли «опросить» турболинку на текущей странице. Какая-то автоматическая ссылка нажимает каждые X секунд, чтобы перезагрузить только соответствующий раздел страницы (тело). Поскольку turbolinks загружает только соответствующий раздел, я думал, что можно было бы опросить текущий турболинк для обновления. Похоже, что нет. –

 Смежные вопросы

  • Нет связанных вопросов^_^