是的,这可能会破坏您的其余代码。当您在生产环境中运行 rails 时,如果您使用了 sproket 并且需要将所有内容放入 application.js 中,那么所有内容都会被处理到一个文件中。如果在该文件中的任何一点,某些 javascript 代码失败,它将破坏文件的其余部分(这很烦人)
您可以有条件地包含我假设您已经在这样做的 raphael 库,因此会出现错误,但是在您的 javascript 代码中,您还可以检查它是否已定义。我要做的是围绕使用 Raphael 的代码,输入如下内容:
if (typeof Raphael !== "undefined") {
... Raphael code goes here...
}
这样,如果库没有加载,没关系,你的代码不会中断,如果它被加载,那么你的 Raphael 特定代码将正常运行:)
更多信息
我也会将 Raphael 库移动到供应商目录中。这更有意义,因为这专门针对您自己未添加/创建的资产。
rails 现在自动加载 Raphael 的原因很可能是由于application.js
. 默认情况下,rails 设置为
//= require_tree .
这将包括资产目录中的所有 JS 文件,这很好,但如果你想有条件地包含文件,那就有点尴尬了。
如果您希望它以每页为基础,您可以更改您的 application.html 布局以添加新的 JS 包含,只有在被告知(通过变量或其他机制)时才会包含 raphael 库
如果您添加类似的内容:
<%= javascript_include_tag("raphael") if @raphael %>
显然,将 raphael 更改为库文件的实际名称,那么它只会在 @raphael 变量为真时包含。你可以在任何地方设置它,无论是在你的控制器中,还是在视图的顶部,甚至在你从视图中调用的视图助手中。完全取决于你