【问题标题】:Where to place the script that is accessible in multiple pages in rails?在哪里放置在rails中的多个页面中可访问的脚本?
【发布时间】:2014-07-26 05:50:37
【问题描述】:

我有三个函数,分别是 add()、subtract() 和 multiply(),我有两个页面在脚本中使用相同的函数,我希望它把它放在一个共同的地方,这样它就不会重复了。我试着把它写成

<script>
function add(number) {}
function subtract(number) {}
function multiply(number) {}
</script>

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 显示错误,例如资产被过滤掉并且不会被提供:addRails.application.config.assets.precompile += %w( update_details.js ) to config/initializers/assets.rb
    • @Logesh,错误解释了你必须做什么才能让它工作
    【解决方案2】:

    您没有通过在视图中编写脚本来使用 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 )    
    

    【讨论】:

    • 谢谢。我了解并且我已经添加了 Rails.application.config.assets.precompile += %w( jquery.inview.min.js ),我可以简单地将 update_details.js 附加到它吗?
    • 谢谢。我会使用它,使用后我会标记为答案。
    【解决方案3】:

    不显眼

    您似乎错过了asset pipeline 的要点- 将这些函数放入一个 Javascript 文件中,您可以从希望它运行的页面调用该文件。

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

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

    --

    application.js

    目前,您在视图或布局中包含 Javascript。这不仅是WET,还会让你以后无法使用你需要的JS。

    要解决此问题,您最好将函数放入自己的文件中。您可以创建一个文件,也可以放入application.js 文件——所有Rails 应用程序中都存在该文件:

    #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

    【讨论】:

      猜你喜欢
      • 2016-12-16
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多