【问题标题】:Rails root_path in application.jsapplication.js 中的 Rails root_path
【发布时间】:2011-01-24 21:40:15
【问题描述】:

如何在我的 application.js 文件中获取项目的 root_path

我需要它用于需要加载其他 JS 文件的 js 插件(codemirror)。如果我说“/javascripts/needed_file.js”,这一切都很好,但如果我将我的项目部署到“/custom”呢?

代码需要在整个项目中发挥它的魔力,我希望它是 UJS,所以它需要在一个静态 javascript 文件中。

任何解决方案/简单的技巧?

【问题讨论】:

    标签: javascript ruby-on-rails codemirror


    【解决方案1】:

    没有完美的解决方案。我会尝试以下方法之一:

    • 检查window.location.pathname。以此确定是从根目录运行还是从前缀 url 运行。

    • 在布局文件顶部的某处添加类似<script type="text/javascript" charset="utf-8">var ROOT_PATH = '<%= Rails.root_path %>';</script> 的内容。

    • 使用这个非常老套的函数(我怀疑它可能会破坏某些 HTML5 脚本属性):

      function urlOfCurrentFile() {
        var scripts = document.getElementsByTagName("script");
        return scripts[scripts.length - 1].src;
      }
      

    【讨论】:

    • 我实际上有一个指向我网站主页的链接......所以它就像 $('#header a').attr('href') 一样简单。仍然很hackish,但它有效,所以我不能抱怨..谢谢你
    • <script> 方法是我认为最好的方法(因为您可以在一天内更改横幅、更改链接、更改选择器等...)
    【解决方案2】:

    我的头文件中有这个。

    <script type="text/javascript">
      var BASE_URL = '<%= root_url %>';
    </script>
    

    【讨论】:

      【解决方案3】:

      嗯,我发现最好的方法是利用 JS 的力量来做到这一点,比如:

      window.location.origin # http://localhost:3000/
      

      它将为您提供完整的主机名、http:// 和端口号。就像在本地运行 Rails 服务器一样,它会给你:http://localhost:3000

      window.location.hostname # localhost
      

      它只会给你主机名,而不是端口或 HTTP。如果 Rails 服务器在本地运行,它会给你:localhost

      【讨论】:

        猜你喜欢
        • 2021-02-04
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-01
        • 2011-10-27
        • 1970-01-01
        相关资源
        最近更新 更多