Dyl*_*lan 17 ruby-on-rails asset-pipeline zurb-foundation ruby-on-rails-4
我正在尝试将我的Ruby on Rails应用程序从Foundation 4升级到新发布的Foundation 5,并且CSS切换相对平稳.但是,我遇到了切换Javascript文件的问题.
当我切换Foundation.min.js和modernizr.js文件的Foundation 4版本然后重新加载页面时,我在控制台中得到了这个奇怪的JS错误:
Uncaught TypeError: Layer must be a document node foundation.js?body=1:35
FastClick foundation.js?body=1:35
FastClick.attach foundation.js?body=1:35
(anonymous function) foundation.js?body=1:40
(anonymous function)
Run Code Online (Sandbox Code Playgroud)
我甚至不知道FastClick做了什么,但它似乎包含在Foundation 5中,它正在阻止Foundation加载.反过来,这也导致我所有依赖于Foundation的JS都失败了.
任何帮助将不胜感激,谢谢!
fny*_*fny 25
更新:v5.0.3已发布,解决了此问题.请务必相应地更新您的foundation-rails宝石.
这是在合并到v5.0.3 的提交中解决的错误.这个修复程序只是在jQuery中包装了一个嵌入式库.您可以通过手动包含该版本直到v5.0.3发布来解决此问题.FastClick#ready()
通过将脚本移动到页面底部,您就放弃了Rails Turbolinks.Turbolinks要求JavaScript包含在内,<head />因为它会对<body />每个请求进行擦除.
这是怎么回事
Foundation不再等待DOM加载,而是立即执行.为了提高移动性能,Foundation 5嵌入FastClick了一个polyfill,可以消除具有触摸UI的浏览器上的点击延迟.执行后,基金会立即尝试附加FastClick到document.body.如果基金会在初始化<head />,身体尚未存在:document.body将合理地返回null导致FastClick废弃其裤子.
确保两者都在<body>标签的末尾,而不是在标签的末尾<head>.
这会抛出错误:
<html>
<head>
</head>
<script src="/static/js/modernizr.js"></script>
<script src="/static/js/foundation.min.js"></script>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但这会起作用:
<html>
<head>
</head>
<body>
<script src="/static/js/modernizr.js"></script>
<script src="/static/js/foundation.min.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4059 次 |
| 最近记录: |