2017-09-05 47 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

相关问题