javascript - 如何在 Rails 中的单个页面上/为单个页面包含自定义 javascript?

标签 javascript html ruby-on-rails asset-pipeline haml

我的网站有一个交互式标题,位于/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/

相关文章:

javascript - 在不使用 Jquery 推送其他图像的情况下,在鼠标悬停时放大图像?

javascript - 如何在 ExtJS 中单击按钮打开模式

javascript - XHTML 中的 JavadScripting 最新更新

html - .css 页面切断页脚,不会滚动

ruby-on-rails - rails 5 : image and loop of images are not showing in email

javascript - 一种以编程方式跨元素及其元素 :before? 传输不相关属性的方法

html - 在 Bootstrap 中更改列堆栈顺序

javascript - 如何从数据库动态更新号码

ruby-on-rails - 茧链接不起作用

ruby-on-rails - 如何在 Ruby 中对获取参数和检查 nil 的代码进行去重