由于JS库错误,Javascript无法在生产Rails页面上工作
Javascript not working on Production Rails page due to JS library error?
我有一些简单的javascript来隐藏和显示我的网页上的文本块,这曾经工作得很好。我最近在assets/javascripts中放置了一个新的javascript库,以便在我的网站上创建其他视觉效果。它工作得很好,但现在我的简单javascript不再在线工作,尽管它仍然在本地工作。Chrome控制台显示来自库的错误消息("未捕获的ReferenceError: Raphael未定义")。
这可能会阻止我的javascript的其余部分在生产服务器上工作,而不是在我的本地开发服务器上?我如何防止资源库从加载到其他页面,所以它不会破坏一切?
是的,这会破坏你剩下的代码。当您在生产环境中运行rails时,如果您使用了sprokets并要求将所有内容都放入application.js中,那么所有内容都将被处理成单个文件。如果在该文件中的任何一点javascript代码失败,那么它将破坏文件的其余部分(这是相当烦人的)
你可以有条件地包括拉斐尔库,我假设你已经这样做,因此错误,但在你的javascript代码,你也可以检查,看看它是否被定义。我要做的是在使用Raphael的代码周围加上一些东西,比如:
if (typeof Raphael !== "undefined") {
... Raphael code goes here...
}
这样,如果库没有加载,没关系,你的代码不会中断,如果它被加载,那么你的Raphael特定的代码将正常运行:)
更多信息
我也会将Raphael库移到vendor目录中。这更有意义,因为这是专门针对您没有自己添加/创建的资产。
rails现在自动加载Raphael的原因很可能是由于application.js
的默认配置。默认情况下,rails使用
//= require_tree .
这将包括资产目录下的所有JS文件,但如果你想有条件地包括文件,那就有点尴尬了。
如果你想让它在每页的基础上是有条件的,你可以改变你的application.html布局来添加一个新的JS包括,它将包括raphael库只有当它被告知(通过一个变量或其他机制)
如果您添加如下内容:
<%= javascript_include_tag("raphael") if @raphael %>
显然,将raphael更改为库文件的实际名称,那么它将只包含if,如果@raphael变量为true。你可以在任何地方设置,无论是在控制器中,还是在视图的顶部,甚至是在你从视图调用的视图助手中。完全由你决定
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- 引导程序转盘不工作:堆叠图像(使用rails)
- 为什么Turbolinks不能正常工作?Rails应用程序
- Rails Production-可以工作,但不能编辑/删除/创建记录
- escape_javascript无法在rails 3.2.7中工作
- 地图,rails 4.2,javascript,鼠标悬停,只工作一次(或两次).然后在重新加载之后
- Rails JQuery和Ajax对我来说工作不正常
- 为什么不是't在我的rails部分中工作的DataTables
- Rails页面JS可以在真正的浏览器/手动测试中工作,但不能在PhantomJS&硒规格
- 如何让手图在 Rails 中工作
- Rails 应用程序中不显眼的 JS 无法按预期工作
- rails 预编译 为什么 javascript 在本地不起作用,但在 heroku 它可以工作
- Rails 3.2.3 JavaScript 突然停止工作
- Javascript文件只能在Rails应用程序中按字母顺序工作
- 如何让 AJAX 使用 rails 和 JavaScript 计时器工作
- 自动关闭引导警报在 Rails 中停止工作
- Rails 4:资产管道的正常CSS/JS开发工作流程
- Rails 4 Ajax 调用只工作一次
- Rails 4 turbo-link 阻止 jQuery 脚本工作
- Rails 应用程序 - jQuery Document.ready在单击链接时不调用,但在新选项卡中打开或刷新时工作