#jquery #ruby_on_rails
Есть сайт на рельсах и навигация по сайту полностью на jquery без перезагрузки страниц(не знаю хорошо это или плохо). Все работает, но не так как хотелось бы, код я писал по мере изучения самого языка. Есть меню(заказы, магазин..) с активным "remote: true" link_to order_index_path, remote: true link_to shop_index_path, remote: true ... или тоже самое, но в цикле: - menu.each do |m| - if ((m.parent == 0) && (can? :read, m.access.constantize)) = link_to eval(m.link), remote: true do .menu-btn = m.title В каждом "index.js" присутствует определенный jQuery(ajax) код: $("#main_content").html("<%= j (render 'index') %>") ... $(#somebutton).click(function(){ console.log('help') }) ... Если я перехожу на нужную мне вкладку используя меню (link_to order_index_path, remote: true), то все работает(логично что подключается index.js), но если перезагрузить страницу, то jQuery код не работает. Мне приходится дублировать код и прописывать его в coffee script или в application.js Подобная ситуация встречается везде. Например, мне нужно создать новый заказ, для этого я использую модальное окно (с использованием "slide" эффекта) и когда заказ создан, то в create.js отрисовывается только сама таблица, а не index <% if !@order.errors.empty? %> ... <% else %> $(".panel .panel-body").html("<%= j (render "ordertable") %>") $("#product-modal").modal("hide") <% end %> Возвращаясь к началу, jQuery код с $(#somebutton).click в order_index_path после срабатывания create.js так-же перестает работать. Далее в create.js мне снова приходится дублировать то же самое действие. И на выходе мы получаем дубликат уже в 3-х вьюхах: index.js, coffeescript(application.js) и собственно в create.js(update.js) Как быть? Как мне все это оптимизировать? Обновление Как я написал выше, все работает. Мне хочется оптимизировать код. Я не считаю правильным копировать один и тот же эвент во все вьюхи, которые связаны с index-ами. Как же DRY? При переходе по ссылке подгружается index.js, при перезагрузке страниц подгружается coffee и application.js, но не используется index.js и наоборот. Можно как нибудь обойтись например только coffee?
Ответы
Ответ 1
Есть сайт на рельсах и навигация по сайту полностью на jquery без перезагрузки страниц(не знаю хорошо это или плохо). Воспользуйтесь turbolinks для решения вашей задачи https://github.com/rails/turbolinks Статья на русском https://habrahabr.ru/post/167161/ Пример использования https://my100brands.com В качестве прелоадера я воспользовался плагином NProgress http://ricostacruz.com/nprogress/ application.coffee выглядит следующим образом: initDomPage = -> # исполнить код при начальной инициализации DOM дерева # Прелоадер для Ajax запросов $(document).ajaxSend -> NProgress.set(0.7).start() $(document).ajaxComplete -> NProgress.done() $(document).ajaxError -> NProgress.done() initPage = -> # исполнить код при обновлении страниц и начальной инициализации $(document).on 'ready', initPage $(document).on 'ready', initDomPage $(document).on 'page:load page:restore', initPage $(document).on 'page:before-change', -> NProgress.set(0.7).start() $(document).on 'page:change', -> NProgress.remove() NProgress.done()
Комментариев нет:
Отправить комментарий