2017-09-05 79 views
0

我在我的rails應用程序中使用表單,在我的控制器中檢查表單的內容是否正確,如果不是,我再次呈現頁面解釋頂部控制器Rails在呈現後強制重新加載javascript

if @insertion.save 
      redirect_to @insertion 
     else 
      render 'new' 
     end 

的錯誤

一部分,我認爲我有這條線來顯示錯誤。

<% if @insertion.errors.any? %> 
    <div id="error_explanation"> 
     <div class="alert alert-danger"> 
     The form contains <%= pluralize(@insertion.errors.count, "error") %>. 
     </div> 
     <ul> 
     <% @insertion.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
<% end %> 

的問題是,經過渲染的頁面就不會再加載我的JavaScript文件,所以看法並不如我所料

我如何可以強制重新加載JS渲染後?

這是我應得的咖啡文件的TurboLink

$(document).on "turbolinks:load", -> 
    insertionJS = new Insertion() 
    if $('.insertions.show').length > 0 
    console.log("insertions.show") 
    insertionJS.showJS() .....continue 

回答

0

與設計JavaScript和CSS Turbolinks不重新加載,它把你的鏈接等進入XHR請求然後使用響應更新<body>並觸發其特殊事件(也是爲什麼jQuery $(function() { ... });不能像Turbolinks那樣工作,因爲它做了一個XHR,它並不是一個真正的頁面加載,即使它看起來像一個Rails控制器。使用像你展示的turbolinks:load事件,但那不是magix solu並且您仍然必須記住所有「舊」JavaScript和HTML仍然存在,任何JavaScript「全局變量」都不會被重置等。

如果您想在每個頁面上重新加載/執行JavaScript,只需刪除從您的應用程序(Gemfileapplication.js)Turbolinks。如果你爲你的CSS/JS實現了正確的緩存標題,並且沒有太多的JS,那麼性能差異並不是那麼大。

如果您只是由於某種原因而針對特定頁面/鏈接/表單禁用它,則可以將data-turbolinks="false" attribute添加到鏈接中。請記住,這需要位於通向頁面的鏈接上,而不是頁面本身。爲了讓頁面本身真正重新加載,你可以像location.reload()那樣做,但請記住,在渲染/重定向之後,將會完全分離頁面。

如果你真的想迫使JavaScript來重新加載,你可以插入另一個<script>到頭部動態,但請記住,你原來的JavaScript 仍然加載,因此多數民衆贊成可能是一個痛苦。

我注意到Turbolinks實際上非常龐大和複雜,所以它值得閱讀它自己的文檔,而不僅僅是來自Rails的小片段。 https://github.com/turbolinks/turbolinks

+0

我'解決了'這個問題,創建一個函數,生成一個字符串與HTML內用於顯示錯誤,然後我把它傳遞給flash [:危險]。在我看來,我使用flash.html_safe將消息呈現爲html。不管怎麼說,還是要謝謝你 – Leonardo

相關問題