Ember.js与Rails4:浏览器后退按钮导致Ember应用崩溃

7

编辑:问题已解决。只需删除turbolinks即可。

在使用Rails4应用程序和ember-rails 0.13.0时,我们遇到了浏览器后退按钮无法正常工作的问题。每次使用后退按钮返回到先前的路由时,应用程序都会崩溃并出现以下错误:

在Firefox 24.0a2上:

TypeError: Class.PrototypeMixin.applyPartial is not a function @ http://localhost:3000/assets/ember.js?body=1:11933

在Chromium 28上:

Uncaught Error: jquery-ujs has already been loaded! jquery.js?body=1:517I 
DEBUG: ------------------------------- ember.js?body=1:364
DEBUG: Ember.VERSION : 1.0.0-rc.6.1 ember.js?body=1:364
DEBUG: Handlebars.VERSION : 1.0.0 ember.js?body=1:364
DEBUG: jQuery.VERSION : 1.10.2 ember.js?body=1:364
DEBUG: ------------------------------- 

看起来整个应用程序堆栈被重新加载,最终导致代码库不可用。无论如何,同样的应用程序在Rails3上运行得非常完美。

其他人报告使用turbolinksember.js存在问题:

Cannot perform operations on a Metamorph that is not in the DOM
1个回答

7
在一些调试后我们发现这是由于 turbolinks 导致的问题。使用返回按钮触发了 turbolinks,它们会对 ember.js 应用程序产生奇怪的影响,例如重新加载所有 javascript 脚本,从而覆盖应用程序的状态。
移除 turbolinks 即可解决问题。以下链接介绍了如何实现此操作:http://blog.steveklabnik.com/posts/2013-06-25-removing-turbolinks-from-rails-4

1
Turbolinks还会在Ember中引起“无法对不在DOM中的Metamorph执行操作”的错误 - 当我摆脱Turbolinks时,这个问题也消失了。 - Nathan
@Nathan,谢谢你的报告。我已将它附加到原始问题上,因为它可能对其他人有帮助。 - chrmod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接