我有三个函数,比如add(),subtract()和multiply(),我有两个页面在脚本中使用相同的函数,我希望它把它放在一个常见的地方,这样它就不会重复了。我试着把它作为
<script>
function add(number) {}
function subtract(number) {}
function multiply(number) {}
</script>
在application.html.erb中但它在所有页面中都可用。所以我希望它只能用于这两个页面。我应该在哪里使用它以及如何使用?
答案 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功能
-