Rails 4 应用程序...在开发环境中,除非刷新页面,否则 javascript 不会触发

2024-05-17

所以我的第一个rails4应用程序遇到了一个奇怪的问题,除非我重新加载页面,否则我的页面javascript不会触发。

对于我的 asset pipeline 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 调用。


看起来像是新的副作用涡轮链接 https://github.com/rails/turbolinks/特征。当您单击链接时,页面不会重新加载 - 它只是保留其内容<body>由 AJAX 请求加载。所以:

在第一种情况下,$(function{ ... })没有运行,因为document.ready仅在第一页加载时触发,而不是重新加载正文。

在第二种情况下,<head>没有用涡轮连杆重新装弹,只是用车身重新装弹。所以你只剩下旧的了<script>而且它不会重播!

检查 Turbolink 的一些选项,例如jquery.tubrolinks https://github.com/kossnocorp/jquery.turbolinks.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 4 应用程序...在开发环境中,除非刷新页面,否则 javascript 不会触发 的相关文章

随机推荐