OData를 제외한 서버 페이지 매김에 대한 표준이 없으므로 자신 만의 Collection
을 만드는 것이 좋습니다.
'fetch'를 대체하는 대신, 보통 이러한 경우에 수행 할 작업은 collection.url
속성을 함수로 만들고 컬렉션 상태를 기반으로 적절한 URL을 반환합니다.
페이지 매기기를 수행하려면 페이지 당 X 항목을 기준으로 페이지 수를 계산할 수 있도록 서버에서 총 항목 수를 반환해야합니다. 요즘 일부 API는 기본적으로 HTTP 응답 헤더 인 HAL 또는 HATEOAS와 같은 것을 사용하고 있습니다. 이 정보를 얻으려면 일반적으로 AJAX 조작 후 발생하는 sync
이벤트에 리스너를 추가합니다. 사용 가능한 항목/페이지 수의 외부 구성 요소 (일반적으로보기)에 알릴 필요가있는 경우 이벤트를 사용하십시오.
간단한 예 : 서버가 응답 헤더에 X-ItemTotalCount
을 반환하고 요청 쿼리 문자열에 page
및 items
매개 변수가 필요합니다.우리는 또 다른 자신의 속성을 사용
var PagedCollection = Backbone.Collection.extend({
initialize: function(models,options){
this.listenTo(this, "sync", this._parseHeaders);
this.currentPage = 0;
this.pageSize = 10;
this.itemCount = 0;
},
url: function() {
return this.baseUrl + "?page=" + this.currentPage + "&items=" + this.pageSize;
},
_parseHeaders: function(collection,response){
var totalItems = response.xhr.getResponseHeader("X-ItemTotalCount");
if(totalItems){
this.itemCount = parseInt(totalItems);
//trigger an event with arguments (collection, totalItems)
this.trigger("pages:itemcount", this, this.itemCount);
}
}
});
var PostCollection = PagedCollection.extend({
baseUrl: "/posts"
});
공지 사항, baseUrl
는 PagedCollection을 확장 단순화합니다. 당신이 당신의 자신의 initialize
을 추가해야하는 경우, 부모의 프로토 타입이 같은 하나를 호출하거나 헤더를 구문 분석하지 않습니다
PagedCollection.protoype.initialize.apply(this,arguments)
당신은 당신이 단순히 컬렉션에 fetchNext
및 fetchPrevious
방법을 추가 할 수 있습니다 this.currentPage
및 fetch
을 수정하십시오. 한 페이지를 추가하는 대신 다른 페이지로 바꾸려면 {reset:true}
을 fetch
옵션으로 추가해야합니다.
이제 프로젝트의 백엔드가 일관성이 있다면 서버에서 페이지 매김을 허용하는 리소스는 동일한 매개 변수/응답이 사용된다면 클라이언트의 PagedCollection 기반 컬렉션을 사용하여 나타낼 수 있습니다.
가져 오기 호출 내부에서 수행하지 않고 이런 식으로 데이터를 전달할 수있는 방법이 있습니까? 이전에 컬렉션 자체에서 정의한 필터링 필드가 있지만 기억이 안납니다. 감사! –