我正在尝试在使用 turbolinks 的页面中实现 ACE 编辑器。但是,编辑器仅在我直接调用该页面或重新加载页面时才起作用。导航到它不会触发使编辑器工作的所有必要步骤。
当前集成:
<script src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.8/require.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.1.01/ace.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.1.01/mode-html.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.1.01/mode-css.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
function initialize_editor() {
var editor = ace.edit("html-editor");
editor.setTheme("ace/theme/clouds");
editor.getSession().setMode("ace/mode/html");
editor.setValue($('#template_html').val());
$('form').on('submit', function(event) {
$('#template_html').val(editor.getValue());
});
}
$(document).ready(initialize_editor);
$(document).on('page:load', initialize_editor);
</script>
这会抛出一个Uncaught TypeError: Cannot read property 'ace/ace' of undefined.
离开页面后,js 似乎卡在页面上,并且在每次导航加载时,我都会得到一个 Uncaught ReferenceError: ace is not defined
.
在此处包含 ACE 编辑器(或其他外部库)的正确方法是什么?通过 sprockets 加载它们是行不通的,当将它们复制到vendor/javascripts/
sprockets 清单中并要求它们时,我很难让它正常运行。
关于turbolinks和正确方法的任何启示?