.js.erb VS .js文件.js.erb VS .js文件(.js.erb VS .js)

2019-06-14 10:35发布

什么是优势,把你的JavaScript为你的Rails应用程序到.js.erb文件,而不是只是在你的application.js文件,把它扔? 我有一个为企业创建按钮,所以我应该把代码放到一个create.js.erb文件或者把它放到使用我的application.js:

$("#business_submit").click(function() {}

所有这一边是,我有我的创建按钮

    $('.error').hide();
$("#business_submit").click(function() {
    // validate and process form here

    $('.error').hide();
    var name = $("input#business_name").val();
    if (name == ""  || name == "Required Field") {
        $('#namelabel').show()
        $("#business_name").focus();
        return false;
    }
    var address = $("#business_address").val();
    if (address == ""  || address == "Required Field") {
        $('#addresslabel').show();
        $("#business_address").focus();
        return false;
    }
    var city = $("#business_city").val();
    if (city == "" || city == "Required Field") {
        $('#citylabel').show();
        $('#business_city').focus();
        return false;
    }
    var state = $("#business_state").val();
    if (state == ""  || state == "Required Field") {
        $('#statelabel').show();
        $("#business_state").focus();
        return false;
    }
    var zip = $("#business_zip").val();
    if (zip == ""  || zip == "Required Field") {
        $('#ziplabel').show();
        $("#business_zip").focus();
        return false;
    }
    var phone = $("#business_phone").val();
    if (phone == ""  || phone == "Required Field") {
        $('#phonelabel').show();
        $("#business_phone").focus();
        return false;
    }

     var category = $("#business_business_category_id").val();
    if (category == " - Choose one - ") {
        $('#categorylabel').show();
        $("#business_business_category_id").focus();
        return false;
    }
    $("#new_business")[0].reset();
    $("#new_business").toggle();
   return false;
});

这在我的js文件的伟大工程,但是当我点击创建它实际上并没有派他们在形式向数据库输入的信息。 所以,我想复制的代码粘贴到.js.erb文件。 现在的形式提交到数据库,当我点击创建,但一半的JavaScript不工作。 该$( '错误')隐藏(); 是不是躲在我的错误,他们都表示不管了。 $( “#new_business”)[0] .reset段(); 是不是正在重置我的形式,并没有验证检查,当我点击创建。 所以,我要么有一个全功能的形式不提交或一个提交,但不是真正发挥作用。 哪一个我应该尝试的工作?

我看到很多以$阿贾克斯代码,但我无法弄清楚了我的生活。 我试了一下,我开始在轨一些防伪保护错误,这是一个整体的其他问题。

Answer 1:

.js.erb文件是控制器操作,如创建,当你想在动作完成时的JavaScript执行。 例如,当你想通过AJAX提交表单,并希望当一切都做显示一个警告,你会放

$('#business_submit').click(...)

在你的application.js或* .html.erb,和你的create.js.erb看起来是这样的:

alert('New object id: ' + <%= new_object.id %>);

这样一来,这是获得返回到浏览器的JavaScript可以首先通过厄尔布呈现,让您插入自定义字符串/变量/等就像你可以在.html.erb模板。



Answer 2:

如果我可以促进我几毛钱的答案...

在回答你的问题是非常简单的:

  • * .js.erb结尾的文件,使您的文件由红宝石解释 。 (所以,你将能够使用导轨佣工)

  • * .js文件结尾的文件是一个纯JavaScript。

你将永远不会得到一个* .js文件,如果你里面放置任何Ruby代码一样的工作:

$(function () {
  new Highcharts.Chart({
    chart: { renderTo: 'orders_chart' },
    title: { text: <%= gon.my_title_of_the_day.to_json %> },
  });
})

该部分<%= gon.my_title_of_the_day.to_json %>将只是因为JavaScript一无所知红宝石产生错误。

为了您的*。js文件的作品,你会每次都以静态改变它的日变化:

$(function () {
  new Highcharts.Chart({
    chart: { renderTo: 'orders_chart' },
    title: { text: 'Monday' },
  });
})

:如果您使用* .js.erb,则需要另外的“ 坤 ”宝石通过从控制器到JS数据虽然。

现在为您根本的问题:“为什么是我不工作“javascript代码”我不能回答,因为我没有JavaScript的专家,这是另一个故事... ;-)



Answer 3:

每笔者认为,有js.erb文件的原因是为了获得对轨道佣工像something_url路线。 我发现,大部分的时间,这些网址已嵌入<form>标签或类似的东西,所以我必须为它很少需要。 与.erb处理一切还可以防止您的积极缓存的JavaScript。

由于这些原因,我认为最适当的决定是把JavaScript中的最不显眼的地方可能:application.js中(或其他静态脚本)。 特别是随着jQuery的,这是真的,因为它的目的。

顺便说一句, javascript_auto_include是根据所提供的意见整理你的JavaScript一个不错的,整洁的插件。 而不是积攒的一切application.js ,你可能会考虑这一点。

js.erb与js.rjs

其中这两个(的.erb )确实是从模板生成JavaScript。 这是诸如此类的事情,你会在其中填入HTML标签。 其他( .rjs )是关于控制Ajax响应页面内容,而不会被运行,直到这种AJAXy有人呼吁。



文章来源: .js.erb VS .js