そのため、最初の Rails4 アプリで、ページをリロードしない限りページの JavaScript が起動しないという奇妙な問題が発生しています。
これは、アセット パイプライン JS と content_for JS のインラインの両方に当てはまります。
/assets/javascripts/cars.js ファイルで:
$(function(){
$("#car_car_make_id").on("change", function(){
//SET MODELS
$.ajax({
url: "/car_makes/" + $(this).val() + "/car_models",
type: "GET",
dataType: "json",
cache: false
})
.done(function(data) { model_list(data) })
.fail(function() { alert("error"); })
});
});
function model_list(data) {
$("#car_car_model_id").empty();
$.each(data, function(i,v){
$("<option />").val(v.id).text(v.name).appendTo("#car_car_model_id");
});
//ON COMPLETE SHOW
$("#car_model_div").show();
}
content_for を使用したページ内インライン:
<% content_for :head do %>
<script type="text/javascript">
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('yt_vid', {
height: '390',
width: '640',
videoId: '<%= @timeslip.youtube_id %>'
});
}
</script>
<% end %>
これらは両方とも、ページを更新した場合にのみ発生します。
たとえば、YouTube ビデオのあるページへのリンクをクリックしても、ロードされません。しかし、リフレッシュすればそうなるでしょう。アセット パイプライン スクリプトと同じです。最初にページをリロードした場合にのみ ajax 呼び出しが行われます。