我有一個Rails應用程序,我最近更新到5.0.0.RC1
。大部分過渡都很順利,但我在新的Turbolinks上遇到了一些麻煩。在我的應用我的例子中使用這個寶石:Rails 5 - turbolinks 5,一些JS沒有加載頁面渲染
gem 'chosen-rails'
我application.js
文件看起來像這樣:
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require best_in_place
//= require tether
//= require bootstrap
//= require chosen-jquery
//= require_tree .
//= require turbo links
當我點擊一個鏈接,並呈現一個視圖我chosen-query
(best_in_place
不作爲工作)在初始加載時不起作用,但如果我對頁面進行了硬刷新,那麼它就可以工作。下面是結果我得到的圖像:
,這裏是如何,我希望它看起來圖像:
再次,預期看作品,如果我使頁面的硬刷新,而不是後我的下拉列表中選擇定期redirect_to ...
的代碼看起來是這樣的:
= select_tag :screen, options_from_collection_for_select(@screens, "id", "name"), id: "screen-selection", prompt: "Jump to screen", class: 'form-control chosen-select', style: "max-width: 250px !important"
一個redirect_to
它導致下面的HTML後:
<select name="screen" id="screen-selection" class="form-control chosen-select" style="max-width: 250px !important">[...]</select>
...和硬頁面重新加載後,我得到這個:
<select name="screen" id="screen-selection" class="form-control chosen-select" style="max-width: 250px !important; display: none;">[...]</select>
<div class="chosen-container chosen-container-single" style="width: 190px;" title="" id="screen_selection_chosen"><a class="chosen-single"><span>Jump to screen</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off"></div><ul class="chosen-results"><li class="active-result result-selected" data-option-array-index="0" style="">Jump to screen</li><li class="active-result" data-option-array-index="1" style="">tests</li></ul></div></div>
在.coffee
文件我嘗試初始化chosen
是這樣的:
# enable chosen js
$('#screen-selection').chosen({
width: '190px'
})
我做錯了什麼想法?
但有一個大,但:turbolinks存儲頁面的緩存,這樣你應該確保你的JavaScript代碼是冪等的,否則你可以最終在頁面上有幾個選擇(或在其他情況下,幾個事件處理程序附加到元素)。欲瞭解更多信息,請閱讀https://www.crossplatform。net/rails/article/should-you-disable-turbolinks/idempotent-transformation/ – maprihoda
除非將處理程序附加到文檔中,否則幾個事件處理程序部分不需要太擔心。否則,至少在Turbolinks 5中,
被克隆並恢復,沒有任何關聯的處理程序等等。 –