Rubby Gem Pagy + Infinite-Scroll Plugin으로 API 응답 데이터를 무한 스크롤
의 목적
Pagy의 공식 문서가 충실하지만 일본어 정보가 적으니 이번에는'Pagy'사용법을 소개한다.또 PAFOR에 대한 기준 테스트 결과가 Giithub에 실렸으니 관심 있는 분들은 저쪽을 보세요.
할 일
데이터
이번에는 모델로부터 얻은 데이터가 아니라 API가 응답한 데이터를 페이지로 식별했다.API에서 받은 JSON 데이터를 Hash로 변환한 후 Pagy에 배열된 이미지로 전달합니다.또한 이번 목적은 Pagy를 활용하기 위해 API를 실제로 준비하지 않고 Controller 내에서 배열 데이터를 직접 정의하는 것이다.
컨디션
이 글은 다음과 같은 환경을 사용합니다.
이 글은 다음과 같은 환경을 사용합니다.
Pagy 설치
먼저 Gemfile에 "pagy"를 추가합니다.
Gemfilegem 'pagy'
Gem을 추가한 후 설치합니다.
bashbundle install --path vendor/bundle
Controller 설정
Controller에 Pagy의 Backend 모듈을 포함합니다.
app/controllers/contents_controller.rbclass ContentsController < ApplicationController
include Pagy::Backend
end
Helper 구성
Helper에 Pagy를 포함하는 Fronted 모듈입니다.
app/helpers/contents_helper.rbmodule ContentsHelper
include Pagy::Frontend
end
Pagy의 초기 파일 만들기
초기 파일을 만들면 기본값에서 Pagy 설정을 변경할 수 있습니다.예를 들어 한 페이지에 표시되는 데이터 건수를 지정하거나 국제화에 대응하는 설정을 설정할 수 있다.
이번에는 그룹에 대한 페이지 표시에 필요한 프로그램 라이브러리만 읽습니다.
다른 설정 가능한 항목을 알고 싶으신 분들은 Pagy의github에 공개된 것을 보십시오.
gem 'pagy'
bundle install --path vendor/bundle
Controller에 Pagy의 Backend 모듈을 포함합니다.
app/controllers/contents_controller.rb
class ContentsController < ApplicationController
include Pagy::Backend
end
Helper 구성
Helper에 Pagy를 포함하는 Fronted 모듈입니다.
app/helpers/contents_helper.rbmodule ContentsHelper
include Pagy::Frontend
end
Pagy의 초기 파일 만들기
초기 파일을 만들면 기본값에서 Pagy 설정을 변경할 수 있습니다.예를 들어 한 페이지에 표시되는 데이터 건수를 지정하거나 국제화에 대응하는 설정을 설정할 수 있다.
이번에는 그룹에 대한 페이지 표시에 필요한 프로그램 라이브러리만 읽습니다.
다른 설정 가능한 항목을 알고 싶으신 분들은 Pagy의github에 공개된 것을 보십시오.
module ContentsHelper
include Pagy::Frontend
end
초기 파일을 만들면 기본값에서 Pagy 설정을 변경할 수 있습니다.예를 들어 한 페이지에 표시되는 데이터 건수를 지정하거나 국제화에 대응하는 설정을 설정할 수 있다.
이번에는 그룹에 대한 페이지 표시에 필요한 프로그램 라이브러리만 읽습니다.
다른 설정 가능한 항목을 알고 싶으신 분들은 Pagy의github에 공개된 것을 보십시오.
require 'pagy/extras/array'
붙여넣기 처리된 설치
스토리지를 페이지로 나누려면 pagy -호출 처리를 할 그룹을 aray에 건네주고 뷰에서 이 반환 값을 사용합니다.또한 해싱 열을 선택적 매개변수로 전송하여 다양한 지정을 수행할 수 있습니다.다음 견본의'items:3'은 페이지당 표시되는 데이터 수가 3개임을 나타낸다.옵션 매개변수에서 지정할 수 있는 내용은 Pagy의 초기 파일로도 정의할 수 있습니다.
위에서 말한 바와 같이 호출할 데이터는 define입니다.직접 데이터 방법으로 정의합니다.
app/controllers/contents_controller.rbclass ContentsController < ApplicationController
include Pagy::Backend
def search
@api_results = define_data
@pagy, @api_results = pagy_array(@api_results, items: 3)
end
def define_data
results = [
{ id: 1, content: 'test data 01', date: '2019/04/01 10:01:00' },
{ id: 2, content: 'test data 02', date: '2019/04/01 10:02:00' },
{ id: 3, content: 'test data 03', date: '2019/04/01 10:03:00' },
{ id: 4, content: 'test data 04', date: '2019/04/01 10:04:00' },
{ id: 5, content: 'test data 05', date: '2019/04/01 10:05:00' },
{ id: 6, content: 'test data 06', date: '2019/04/01 10:06:00' },
{ id: 7, content: 'test data 07', date: '2019/04/01 10:07:00' },
{ id: 8, content: 'test data 08', date: '2019/04/01 10:08:00' },
{ id: 9, content: 'test data 09', date: '2019/04/01 10:09:00' },
{ id: 10, content: 'test data 10', date: '2019/04/01 10:10:00' },
{ id: 11, content: 'test data 11', date: '2019/04/01 10:11:00' },
{ id: 12, content: 'test data 12', date: '2019/04/01 10:12:00' },
{ id: 13, content: 'test data 13', date: '2019/04/01 10:13:00' },
{ id: 14, content: 'test data 14', date: '2019/04/01 10:14:00' },
{ id: 15, content: 'test data 15', date: '2019/04/01 10:15:00' },
{ id: 16, content: 'test data 16', date: '2019/04/01 10:16:00' },
{ id: 17, content: 'test data 17', date: '2019/04/01 10:17:00' },
{ id: 18, content: 'test data 18', date: '2019/04/01 10:18:00' },
{ id: 19, content: 'test data 19', date: '2019/04/01 10:19:00' },
{ id: 20, content: 'test data 20', date: '2019/04/01 10:20:00' },
{ id: 21, content: 'test data 21', date: '2019/04/01 10:21:00' },
{ id: 22, content: 'test data 22', date: '2019/04/01 10:22:00' },
{ id: 23, content: 'test data 23', date: '2019/04/01 10:23:00' },
{ id: 24, content: 'test data 24', date: '2019/04/01 10:24:00' },
{ id: 25, content: 'test data 25', date: '2019/04/01 10:25:00' },
{ id: 26, content: 'test data 26', date: '2019/04/01 10:26:00' },
{ id: 27, content: 'test data 27', date: '2019/04/01 10:27:00' },
{ id: 28, content: 'test data 28', date: '2019/04/01 10:28:00' },
{ id: 29, content: 'test data 29', date: '2019/04/01 10:29:00' },
{ id: 30, content: 'test data 30', date: '2019/04/01 10:30:00' }
]
end
end
이렇게 하면 붙여넣을 데이터를 준비할 수 있고, 다음에 보기 측면의 처리를 쓸 수 있다.게다가 div 라벨의'contents'ID와'contentent'의class 이름은 임의이지만 무한 스크롤 설치 시 자바스크립트 옆에서 사용하기 때문에 변경할 때 주의하십시오.
app/views/contents/search.html.slim#contents
.content
- @api_results.map do |result|
div
= "内容:#{result[:content]} | 作成日時:#{result[:date]} "
== pagy_nav @pagy
페이지 스타일 확인
여기에 설치하면 다음과 같은 스티커를 할 수 있을 것입니다.
2, 3, Prev, Next가 작동하는지 확인합니다.
무한 스크롤 가져오기
만든 페이지를 무한 스크롤로 변경합니다.
우선, 다음 설명에서부터 자바스크립트의 플러그인을 가져와 "app/assets/javascript/"의 바로 아래에 설정합니다.
class ContentsController < ApplicationController
include Pagy::Backend
def search
@api_results = define_data
@pagy, @api_results = pagy_array(@api_results, items: 3)
end
def define_data
results = [
{ id: 1, content: 'test data 01', date: '2019/04/01 10:01:00' },
{ id: 2, content: 'test data 02', date: '2019/04/01 10:02:00' },
{ id: 3, content: 'test data 03', date: '2019/04/01 10:03:00' },
{ id: 4, content: 'test data 04', date: '2019/04/01 10:04:00' },
{ id: 5, content: 'test data 05', date: '2019/04/01 10:05:00' },
{ id: 6, content: 'test data 06', date: '2019/04/01 10:06:00' },
{ id: 7, content: 'test data 07', date: '2019/04/01 10:07:00' },
{ id: 8, content: 'test data 08', date: '2019/04/01 10:08:00' },
{ id: 9, content: 'test data 09', date: '2019/04/01 10:09:00' },
{ id: 10, content: 'test data 10', date: '2019/04/01 10:10:00' },
{ id: 11, content: 'test data 11', date: '2019/04/01 10:11:00' },
{ id: 12, content: 'test data 12', date: '2019/04/01 10:12:00' },
{ id: 13, content: 'test data 13', date: '2019/04/01 10:13:00' },
{ id: 14, content: 'test data 14', date: '2019/04/01 10:14:00' },
{ id: 15, content: 'test data 15', date: '2019/04/01 10:15:00' },
{ id: 16, content: 'test data 16', date: '2019/04/01 10:16:00' },
{ id: 17, content: 'test data 17', date: '2019/04/01 10:17:00' },
{ id: 18, content: 'test data 18', date: '2019/04/01 10:18:00' },
{ id: 19, content: 'test data 19', date: '2019/04/01 10:19:00' },
{ id: 20, content: 'test data 20', date: '2019/04/01 10:20:00' },
{ id: 21, content: 'test data 21', date: '2019/04/01 10:21:00' },
{ id: 22, content: 'test data 22', date: '2019/04/01 10:22:00' },
{ id: 23, content: 'test data 23', date: '2019/04/01 10:23:00' },
{ id: 24, content: 'test data 24', date: '2019/04/01 10:24:00' },
{ id: 25, content: 'test data 25', date: '2019/04/01 10:25:00' },
{ id: 26, content: 'test data 26', date: '2019/04/01 10:26:00' },
{ id: 27, content: 'test data 27', date: '2019/04/01 10:27:00' },
{ id: 28, content: 'test data 28', date: '2019/04/01 10:28:00' },
{ id: 29, content: 'test data 29', date: '2019/04/01 10:29:00' },
{ id: 30, content: 'test data 30', date: '2019/04/01 10:30:00' }
]
end
end
#contents
.content
- @api_results.map do |result|
div
= "内容:#{result[:content]} | 作成日時:#{result[:date]} "
== pagy_nav @pagy
여기에 설치하면 다음과 같은 스티커를 할 수 있을 것입니다.
2, 3, Prev, Next가 작동하는지 확인합니다.
무한 스크롤 가져오기
만든 페이지를 무한 스크롤로 변경합니다.
우선, 다음 설명에서부터 자바스크립트의 플러그인을 가져와 "app/assets/javascript/"의 바로 아래에 설정합니다.
app/assets/javascripts/contents.js
$(document).on('turbolinks:load', function () {
$('#contents').infiniteScroll({
path: "nav.pagination a[rel=next]",
append: ".content",
hideNav: '.pagination',
history: false,
prefill: true,
status: '.page-load-status'
})
});
지정한 옵션의 뜻은 다음과 같다.app/assets/javascripts/application.js
//= require jquery
무한 스크롤 동작 확인
화면을 다시 확인하면 무한 스크롤이 가능할 것 같다.
만약 순조롭게 돌아가지 못하면 슬림의 축소, div 라벨의 ID와class 이름을 확인하십시오.
소스 코드
실제 손에서 코드를 이동하고 싶은 사람은 아래에서부터 클론을 사용하세요.
실제 손에서 코드를 이동하고 싶은 사람은 아래에서부터 클론을 사용하세요.
참고 자료
Reference
이 문제에 관하여(Rubby Gem Pagy + Infinite-Scroll Plugin으로 API 응답 데이터를 무한 스크롤), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuskubo/items/efd9edd4e6b27a15b597텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)