미래주의가 포함된 툴팁
5626 단어 railsfuturismcablereadyhotwire
그래서 저는 기존 레거시 코드베이스와 더 잘 맞을 수 있는 대안의 예로서 (일반 Rails 부분에 의존하기 때문에) CableReady 에코시스템의 지연 로딩 솔루션인 futurism을 사용하여 빠른 응답을 작성하기로 결정했습니다. 응용 프로그램에 이미 존재할 수도 있습니다!).
시작하자!
1. 미래주의 설치
먼저 퓨처리즘을 설치해 보겠습니다. Sean의 저장소는 importmaps를 사용하므로 Futurism 설치 프로그램이 완전히 이식되지 않은 한
app/javascript/controllers/index.js
에서 약간의 수동 설치를 수행해야 합니다.$ bundle add futurism -v 1.2.0.pre9
$ bin/importmap pin @stimulus_reflex/[email protected]
// app/javascript/controllers/index.js
import { Application } from "@hotwired/stimulus";
// NEW: import cable from turbo-rails and futurism
import { cable } from "@hotwired/turbo-rails";
import * as Futurism from "@stimulus_reflex/futurism";
const application = Application.start();
// Configure Stimulus development experience
application.debug = false;
window.Stimulus = application;
export { application };
// NEW: initialize futurism
const consumer = await cable.getConsumer();
Futurism.initializeElements();
Futurism.createSubscription(consumer);
기본적으로 이것은 기본 ActionCable 소비자로 Futurism을 초기화하고 후드 아래에서 사용되는 사용자 정의 요소를 초기화합니다.
2. 지연 로딩 구현
Sean과 Steve는 툴팁을 로드하기 위해 부분적으로 쇼 보기와
user
에서 터보 프레임을 사용합니다. 원본 기사/소스 코드를 인용하려면:<!-- app/views/tooltips/show.html.erb -->
<turbo-frame id="<%= params.fetch :turbo_frame, dom_id(@user) %>" target="_top">
<div class="relative">
<div class="flex gap-2 items-center p-1 bg-black rounded-md text-white">
<%= render partial: "users/user", object: @user, formats: :svg %>
<strong>Name:</strong>
<%= link_to @user.name, @user, class: "text-white" %>
</div>
<div class="h-2 w-2 bg-black rotate-45 -top-1 -left-2 ml-[50%] relative"></div>
</div>
</turbo-frame>
<!-- app/views/users/_user.html.erb -->
<turbo-frame id="<%= dom_id user, :tooltip %>" target="_top" role="tooltip"
src="<%= user_tooltip_path(user, turbo_frame: dom_id(user, :tooltip)) %>"
class="hidden absolute translate-y-[-150%] z-10
peer-hover:block peer-focus:block hover:block focus-within:block"
>
이제 무엇보다도 이것은 프레임의 주소 지정과 관련하여 처음 독자에게 약간의 혼란을 야기합니다. Turbo가 올바른 프레임을 교체하도록 하려면 식별자를
TooltipsController
user_tooltip_path(user, turbo_frame: dom_id(user, :tooltip))
사용.미래주의를 사용하여 나는 약간 다른 접근 방식을 취할 것입니다. 먼저 내용을 툴팁
show.html.erb
에서 _tooltip.html.erb
부분으로 이동할 것입니다(내용은 정확히 동일하게 유지될 수 있으며 주변<turbo-frame>
을 버리는 것입니다):<!-- app/views/tooltips/_tooltip.html.erb -->
<div class="relative">
<div class="flex gap-2 items-center p-1 bg-black rounded-md text-white">
<%= render partial: "users/user", object: user, formats: :svg %>
<strong>Name:</strong>
<%= link_to user.name, user, class: "text-white" %>
</div>
<div class="h-2 w-2 bg-black rotate-45 -top-1 -left-2 ml-[50%] relative"></div>
</div>
_user.html.erb
에서 Turbo 프레임을 futurize 호출로 교환하고 마크업을 약간 재구성했습니다(피어-호버가 작동하도록 하기 위해 둘러싸는 <span>
).이 순간에 알아야 할 것은
render partial:
의 API를 따르고 블록에 자리 표시자를 전달할 수 있다는 것입니다(여기서는 생략했습니다).<!-- app/views/users/_user.html.erb -->
<div id="<%= dom_id user %>" class="scaffold_record">
<p>
<strong>name:</strong>
<%= user.name %>
</p>
<p class="relative">
<%= link_to "show this user", user, class: "peer", aria: { describedby: dom_id(user, :tooltip) } %>
<span class="hidden absolute translate-y-[-150%] z-10 peer-hover:block peer-focus:block hover:block focus-within:block">
<%= futurize partial: "tooltips/tooltip",
locals: {user: user},
extends: :div do %>
<% end %>
</span>
</p>
</div>
결과는 모든 상용구를 포함하지 않는 전체 RESTful 경로를 사용하더라도 동등한 기능입니다. 이번에는
<futurism-element>
를 사용하여 ActionCable과 통신하고 CableReady는 백그라운드에서 무거운 작업을 수행합니다. 관찰: 3. 결론
이 비교를 즐겼기를 바랍니다. 여기에는 옳고 그름이 없다는 것을 밝히는 것이 중요합니다. 나는 터보 프레임이 물건이 되기 전에도 미래주의를 썼고, 요즘 대부분의 경우에 후자를 사용하고 있습니다. 그러나 때로는 덜 방해가 되는 접근 방식이 선호됩니다. 특히 레거시 코드베이스 또는 완전한 ActionDispatch 경로가 과도할 수 있는 아주 작은 DOM 조각을 다룰 때 더욱 그렇습니다.
관심 있는 독자는 라이브러리에 대한 추가 정보를 보려면 futurism README을 참조하십시오.
Reference
이 문제에 관하여(미래주의가 포함된 툴팁), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/julianrubisch/tooltips-with-futurism-2834텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)