HTMX를 사용하는 레일의 지연 로드 양식 필드
11926 단어 railsjavascriptrubyhtmx
이전 게시물에서 나는 방법을 썼습니다. 저는 Stimulus과 StimulusReflex을 많이 좋아합니다. 둘을 함께 사용하면 엄청나게 강력한 Rails용 라이브러리 세트가 됩니다.
그러나 최근에HTMX "Javascript를 사용하지 않고 HTML에서 직접 최신 브라우저 기능에 액세스할 수 있게 해주는 라이브러리"에 주목했습니다. 그래서 비교를 위해 HTMX를 사용하여 양식 필드의 동일한 지연 로딩을 구현하려고 생각했습니다.
/app/views/users/_form.html.erb는 이전과 동일하게 보입니다.
<%= form_with(model: user, url: [user], local: true) do |form| -%>
<div class="card">
<ul class="list-group list-group-flush">
<li class="list-group-item">
<%= form.text_field :name, label: "Name", placeholder: "Enter name", required: true %>
</li>
<li class="list-group-item">
<%= form.email_field :email, label: "Email", placeholder: "Enter email", required: true %>
</li>
</ul>
<div class="card-footer">
<%= form.submit "Save", class: "btn btn-secondary float-right" %>
</div>
</div>
<% end %>
이제 HTMX triggers 에 자리 표시자를 포함합니다.
<li class="list-group-item">
<label class="required">Repositories</label>
<div hx-get="/users/repositories" hx-trigger="load delay:1s" hx-swap="innerHTML" hx-headers='{"X-Requested-With": "XMLHttpRequest"}'>
<i>Loading...</i>
</div>
</li>
몇 가지 중요한 HTMX 속성은 다음과 같습니다.
route.rb에서 새 엔드포인트를 추가합니다.
resources :users do
collection do
get "repositories", as: :repositories
end
end
그런 다음 저장소 작업을 UsersController에 추가합니다.
def repositories
user = User.new
user.repositories.build
@form = ActionView::Helpers::FormBuilder.new(:user, user, view_context, {})
github = Octokit::Client.new(access_token: current_user.token)
github.auto_paginate = true
@repositories = github.repos({}, query: { type: "any", sort: "asc" })
respond_to do |format|
format.html { render layout: request.xhr? == false }
end
end
이제/app/views/users/repositories.html.erb를 추가합니다.
<% @repositories.each do |repository| %>
<%= @form.fields_for :repositories, repository do |ff| %>
<div class="form-check form-check-inline">
<%= ff.check_box :checked, class: "form-check-input" %>
<%= ff.label :checked, repository.full_name.downcase, class: "form-check-label mr-2 mb-1" %>
</div>
<%= ff.hidden_field :uid, value: repository.id %>
<%= ff.hidden_field :name, value: repository.name %>
<%= ff.hidden_field :path, value: repository.full_name %>
<%= ff.hidden_field :url, value: repository.html_url %>
<% end %>
<% end %>
그게 다야! StimulusReflex 버전과 유사하게 리포지토리를 비동기적으로 로드합니다.
두 가지 중요한 참고 사항.
HTMX은 기본적으로 X-Requested-With 헤더를 설정하지 않으므로 Rails는 그것이 xhr 요청인지 알지 못합니다. 이 헤더를 설정하면 request.xhr을 사용할 수 있습니까? 컨트롤러에서 레이아웃을 렌더링할 시기를 아는 데 도움이 됩니다.
<body hx-headers='{"X-Requested-With": "XMLHttpRequest"}'>
HTMX은 very small이지만 놀랍게도 powerful library입니다! 백엔드에서 기존 Rails 부분을 계속 활용하면서 Javascript를 작성하지 않고도 반응형 애플리케이션을 생성할 수 있는 많은 잠재력이 있습니다. 🚀
Reference
이 문제에 관하여(HTMX를 사용하는 레일의 지연 로드 양식 필드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dalezak/lazy-load-form-fields-in-rails-with-htmx-pm0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)