在rails中可以在多个页面中放置脚本的位置?

时间:2014-07-26 05:50:38

标签: javascript jquery ruby-on-rails ruby-on-rails-4 dry

我有三个函数,比如add(),subtract()和multiply(),我有两个页面在脚本中使用相同的函数,我希望它把它放在一个常见的地方,这样它就不会重复了。我试着把它作为

<script>
function add(number) {}
function subtract(number) {}
function multiply(number) {}
</script>
在application.html.erb中

但它在所有页面中都可用。所以我希望它只能用于这两个页面。我应该在哪里使用它以及如何使用?

3 个答案:

答案 0 :(得分:1)

使用Add(),subtract()和multiply()函数创建一个单独的js文件,并将此js文件链接到两个页面。

答案 1 :(得分:1)

通过在视图中编写脚本,您没有使用rails资产管道。如果你看rail guides就说

Asset pipeline concatenate assets, which can reduce the number of requests that a browser makes to render a web page. Web browsers are limited in the number of requests that they can make in parallel, so fewer requests can mean faster loading for your application.

所以你应该使用它。

你可以做一个单独的文件让我们说app / assets / javascript目录中的update_details.js然后在application.js中要求该文件

//= require update_details

或者如果你有// = require_tree。在application.js中,它会自动加载app / assets / javascript文件夹中的所有js文件,因此您不需要单独要求update_details。之后,您只需使用

链接application.js即可
<%= javascript_include_tag "application" %>

如果您只想加载update_details并保留所有其他js文件,那么您可以使用

<%= javascript_include_tag "update_details" %>

在您的布局中,也不要忘记将其包含在资产预编译路径中

Rails.application.config.assets.precompile += %w( jquery.inview.min.js  update_details.js )    

答案 2 :(得分:0)

<强>不唐突的

你似乎错过了asset pipeline的观点 - 将这些功能放入Javascript文件中,您可以从您希望它运行的页面调用它。

Rails使用您的应用程序的layout执行此操作:

#app/views/layouts/application.html.erb
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>

-

<强>的application.js

Currentely,您直接在视图或布局中包含 Javascript。这不仅是WET,而且还会阻止您将来使用所需的JS。

要解决此问题,您最好将功能放入自己的文件中。您可以创建文件,也可以放入所有Rails应用程序中的application.js文件中:

#app/assets/javascripts/application.js
function add(number) {}
function subtract(number) {}
function multiply(number) {}

因为从您的布局调用application.js,所以使用该布局的任何页面都会准备好Javascript功能

-

你绝对应该read up on the asset pipeline for Rails