我的网站有一个交互式标题,位于/views/layouts/_header.html.haml。
我希望将 header 的所有 JavaScript 收集到一个文件中。最重要的是,我将 Twitter Typeahead 和 Bloodhound 用于具有自动建议的搜索字段。许多 JavaScript 必须在 header 呈现后运行,因此它包含在 application.js(包含在我的页面中的 application.html.haml 中)不起作用,因为它在 header 呈现之前运行。
我在/assets/javascripts/下添加了 search-bar.js,其中包含我需要在此页面上运行的所有 JS。
在我的 _header.html.haml 的底部,我只是链接了一个常规脚本标签。
%script{src:"/assets/movie-search-bar.js", type:'text/javascript'}
这在本地运行良好,但在我的开发服务器上,我收到该 Assets 的 404。出于性能原因,它可能会丢弃静态文件吗?即使它确实有效,通过将它包含在 Assets 管道中,脚本不会被加载两次(一次作为单独的脚本,一次在 application.js 中)?
我的印象是,这不是将部分的 javascript 隔离到它自己的文件中的最佳方法。什么是最好和最“railsy”的方式来确保脚本在 _header 呈现后加载一次并在其自己的 JavaScript 文件中隔离?
编辑:这是否可以像将以下行移动到我的页 footer 分的底部一样简单?这被认为是 Rails 中的良好做法吗?
#{ stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true }
#{ javascript_include_tag 'application', 'data-turbolinks-track' => true }
最佳答案
您可以在 application.js
以外的脚本上使用 javascript_include_tag
。首先,确保您的脚本位于 app/assets/javascripts
文件夹中:app/assets/javascripts/movie-search-bar.js
。
然后在您的 View 中使用 javascript_include_tag
助手:
javascript_include_tag 'movie-search-bar'
并告诉 Rails 预编译该 Assets 。
config.assets.precompile << "movie-search-bar.js"
关于javascript - 如何在 Rails 中的单个页面上/为单个页面包含自定义 javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36612769/