0

Это происходит в приложении Rails 5 с Ruby 2.3.1. Когда выпадающий список изменен, я хочу собрать дополнительную информацию через запрос ajax для отображения ниже раскрывающегося списка. Эта функциональность работает, но только если я загружаю или обновляю страницу.Функция Javascript активируется только при обновлении страницы

приложение/активы/JavaScripts/articles.coffee

initGuideline = -> 
    $('#article_theme_id').on 'change', (event) -> 
    $.ajax 
     url: "/themes/guideline", 
     type: "GET", 
     format: 'js', 
     data: { 
     theme_id: $("#article_theme_id").val() 
     } 
$(document).ready initGuideline 
$(document).on 'ready page:load', initGuideline 

выпадающий список в виде частичной, views/articles/_fields.html.slim, которая вызывается из views/articles/new.html.slim и views/articles/edit.html.slim.

Gemfile

source 'https://rubygems.org' 
gem 'rails', '~> 5.0.1' 
gem 'sqlite3' 
gem 'puma', '~> 3.0' 
gem 'sass-rails', '~> 5.0' 
gem 'uglifier', '>= 1.3.0' 
gem 'coffee-rails', '~> 4.2' 
gem 'jquery-rails' 
gem 'turbolinks', '~> 5' 
gem 'jbuilder', '~> 2.5' 
gem 'bootstrap-sass' 
gem 'devise' 
gem 'slim' 
gem 'pundit' 
gem 'will_paginate' 
and other gems.. 

активы/JavaScripts/application.js

//= require jquery 
//= require jquery_ujs 
//= require turbolinks 
//= require bootstrap-sprockets 
//= require_tree . 

При обновлении страницы информация fecthed и отображается. Но если я перейду от страницы и вернусь назад, функция javascript больше не будет запущена.

Вышеупомянутая проблема решена путем предоставления ответа ниже. Поведение вызвано Turbolinks и раствор:

$(document).ready initGuideline 
$(document).on 'ready turbolinks:load', initGuideline 
+0

После следующего изменения, результаты остались прежними: $ (document) .ready initGuideline $ (document) .on 'page: change', initGuideline – user3724786

ответ

1

Это происходит из-за turbolinks, пожалуйста, попытайтесь загрузить на page:change вместо ready

ИЛИ

попробовать

$(document).on 'ready turbolinks:change turbolinks:load' 
1

Это должно было отлично работать с Rails 4, но для Rails 5 (с турбонауками 5) вам нужно использовать turbolinks:load вместо page:load.

$(document).ready initGuideline 
$(document).on 'ready turbolinks:load', initGuideline 

Для получения более подробной информации, пожалуйста, следуйте this thread.

+0

Данное изменение обеспечивает правильное поведение. Спасибо 31piy – user3724786

0

На самом деле вам просто необходимо:

$(document).on 'turbolinks:load', initGuideline 

Нет необходимости слушать готов потому что turbolinks: нагрузка обжигают на готовом

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