Mam aplikację Rails, ostatnio zaktualizowałem ją do 5.0.0.RC1
. Większość przejścia poszło gładko, ale mam problemy z nowymi Turbolinkami. W moim app I na przykład wykorzystać ten klejnot:Szyny 5 - turbolinks 5, niektóre JS nie są załadowane na renderowanie strony
gem 'chosen-rails'
application.js
Mój plik wygląda tak:
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require best_in_place
//= require tether
//= require bootstrap
//= require chosen-jquery
//= require_tree .
//= require turbo links
Kiedy klikam na link i renderowanie widoku mój chosen-query
(best_in_place
nie działa dobrze) nie działa przy początkowym obciążeniu, ale jeśli wykonuję intensywne odświeżanie strony, to działa. Poniżej znajduje się obraz wyniku dostaję:
I tu jest to obraz tego, jak chcę wyglądać:
Ponownie, jeśli oczekiwany wygląd działa robię twarde odświeżenie strony, ale nie po regularnym redirect_to ...
kod dla mojego rozwijanej wygląda następująco:
= 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"
Po redirect_to
to powoduje następujący kod HTML:
<select name="screen" id="screen-selection" class="form-control chosen-select" style="max-width: 250px !important">[...]</select>
... i po ciężkim przeładowania strony mam to:
<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>
W pliku .coffee
próbuję zainicjować chosen
podobnie jak:
# enable chosen js
$('#screen-selection').chosen({
width: '190px'
})
Jakieś pomysły na temat tego, co robię źle?
Ale jest duży, ale: turbolinks przechowuje strony w pamięci podręcznej, więc należy upewnić się, że kod JavaScript jest idempotent, inaczej może skończyć się po kilku wybiera się na stronie (lub w innych przypadkach, kilka zdarzeń obsługi dołączone do elementu). Aby uzyskać więcej informacji, należy przeczytać https: //www.crossplatform.net/rails/article/should-you-disable-turbolinks/idempotent-transformation/ – maprihoda
Część programów obsługi zdarzeń nie jest zbyt wielkim problemem, o ile nie dołączasz procedur obsługi do dokumentu. W przeciwnym razie przynajmniej w Turbolinks 5
jest klonowany i przywracany bez żadnych powiązanych programów obsługi itp. ... przy zachowaniu. –