RubyonRails3将javascript代码放在何处

RubyonRails3将javascript代码放在何处,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,我对Ruby-on-Rails几乎是一个新手,几周前我遵循了Lynda的优秀Ruby-on-Rails指南,因此我知道如何设置项目等。无论如何,我用html/css创建了一个网站,但毕竟我想用Rails来做,所以我开始工作。我喜欢你可以在文件夹中“转储”文件,rails只是把它们挑选出来,但我的站点上也有几行javascript代码来“激活”下面的jquery。它在我的头上 <script type="text/javascript" id="sourcecode"> $(f

我对Ruby-on-Rails几乎是一个新手,几周前我遵循了Lynda的优秀Ruby-on-Rails指南,因此我知道如何设置项目等。无论如何,我用html/css创建了一个网站,但毕竟我想用Rails来做,所以我开始工作。我喜欢你可以在文件夹中“转储”文件,rails只是把它们挑选出来,但我的站点上也有几行javascript代码来“激活”下面的jquery。它在我的头上

<script type="text/javascript" id="sourcecode">
    $(function(){

    $('.scroll-pane').jScrollPane({
    showArrows: false,
    autoReinitialise: true
        });

});
</script>

$(函数(){
$('.scroll pane').jScrollPane({
showrows:错,
自动重新初始化:正确
});
});

所以现在一个简单的问题是,既然rails没有真正的布局和呈现,我应该把代码放在哪里呢

其中有一节介绍如何呈现ERB模板。您需要将javascript代码放在.erb模板的头部,就像在普通HTML页面中一样

为了清楚起见,您可以将脚本标记的内容保存到.js文件中,并在模板中链接到它,就像在纯HTML中一样。

您可以将js:

  • 在erb模板中,它处理
  • 在public/javscripts下,在一个普通的.js文件中,您可以使用javascript\u include\u标记助手将其包含在模板中
  • 在单独的.js.erb模板文件中,用于ajaxian/manual include目的
编辑,根据建议:


就我个人而言,我会选择最后两种方式中的一种,因为它们更符合惯例而不是配置,或者“Rails”方式,我相信这正是您想要的。

我将所有脚本放在public/javascripts目录结构中,该目录结构反映了控制器/操作名称+供应商目录和公共目录。在我的application.html.*中,我有代码将控制器/操作所需的内容加载到标题中。我极力避免将javascript放入.haml(.erb)文件中,但如果必须的话,我愿意打破这个规则。

在Rails 3.1之前,我会将它们放入
public/javascripts/

还要确保在模板中包含Java脚本

<% javascript_include_tag :all %>


出于加载原因,您不希望在加载模板后而不是在开始时调用某些javascript片段(例如:在标题中调用)?

好吧,您不妨解释一下最后一句话。伏都教编程就是从这样的语句中产生的。我试着将代码放在public/javascript文件夹中的“jquery_slider.js”文件中,但似乎没有任何帮助。所以我将尝试你的第一个选择,但正如Jordan所说,我想知道它有什么不好的地方。请参阅@Nick的回复,了解作为测试的include标记。然后将include更改为。我给出的第一个选择很糟糕,因为它就像直接在HTML文件中包含javascript一样。将HTML/javascript/css组合在同一个文件中会创建难以管理的项目。@dmf85:我知道你现在要去哪里。当然,如果要重用外部文件,您会希望将其链接到外部文件。我没有看到第1点中指定的任何内容(意思是,它可能只是一个
),所以我很好奇为什么你不这么做。对我来说,我会结合你的观点#1和#2,说这是链接外部脚本的正确方式。我把网站放在Heroku上,也许你们可以看看,这是一个非rails网站,因为你可以看到非rails版本有蓝色的滚动条,所有的js代码都在加载,但似乎不起作用。我认为这是因为代码$(function(){$('.scroll pane').jScrollPane({showArrows:false,autoreinitialize:true});});应该放在标题中而不是JS文件中。Rails不会自动将该文件夹中的所有JS文件放在标题中吗?不会。只有将
添加到应用程序模板文件中的
块中,才会这样做。