2013-10-09 123 views
2

我想在使用turbolinks的頁面中實現ACE編輯器。但是,編輯器只在我直接調用該頁面或重新加載頁面時才起作用。導航到它不會觸發每一個必要的步驟來使編輯器工作。Turbolinks外部javascript(這裏: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編輯器(或其他外部庫)的正確方法是什麼?通過鏈輪裝載它們將不起作用,當將它們複製到vendor/javascripts/並要求它們在鏈輪清單中時,我很難讓它正常運行。

任何關於turbolinks和正確方法的啓示?

+1

Turbolinks只會在通過url導航時重新載入頁面內容,這意味着javascript不會被加載/重新加載,請試試這個gem [jquery.turbolinks](https://github.com/kossnocorp/jquery.turbolinks),它可能會解決你的問題。 –

回答

0

我可以通過獲取所需的js文件並將其放入vendor/javascript路徑來解決此問題。通過將文件顯式地存儲爲utf8和BOM,可以解決空格和製表符的特殊字符(在其他位置也有報道)的初始問題。

+1

我遇到Ace和Turbolinks問題。我不想把它放到我的資產管道中,因爲這些文件很大,我只在管理界面上使用編輯器。強迫應用程序的所有用戶下載編輯器似乎不公平。 – mscriven