Mam więc dziwny problem z moją pierwszą aplikacją Rails4, w której moja strona javascript nie uruchamia się, chyba że ponownie załaduję stronę.Rails 4 app ... w środowisku programistycznym javascript nie jest uruchamiany, chyba że strona jest odświeżana
Dotyczy to zarówno mojego potoku potoku JS, jak i inline z content_for JS.
w moim /assets/javascripts/cars.js pliku:
$(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();
}
inline na stronie z 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 %>
Obie te tylko ogień gdybym odśwież stronę.
Na przykład, jeśli kliknę link do strony z filmem youtube, nie zostanie załadowany. ale jeśli to odświeżę, będzie. To samo ze skryptem potoku zasobów, to powoduje, że wywoływane jest moje wywołanie ajax, jeśli najpierw ponownie załaduję stronę.
Wyłączono turbolinks i to było przyczyną problemu. Uważam jednak, że może nie być najlepszym rozwiązaniem tego problemu. Zbadam to dalej i zobaczę, czy istnieje sposób, aby mój kod działał z turbolinkami. dziękuję –
Skończyło się na tym, że próbowałem dodać klejnot jquery.turbolinks, a następnie dodałem go do manifestu JS. Naprawiono skrypt gotowy do dokumentu. Jednak nadal nie zrobił treści content_for javascript. Więc wtedy przeniosłem moją zawartość do pisania wewnątrz znacznika body, jednak to nadal nie rozwiązało problemu content_for issue. Skończyło się na tym, że wracam do wyłączania turbolinków. –
Dlaczego należy włączyć javascript w content_for? Dlaczego nie skorzystać z potoku zasobów i pozwolić przeglądarce na natychmiastowe buforowanie całego javascript? – Almaron