내 서버 측 API는 고전적인 결과 페이징 모델을 따릅니다.Simple Backbone.js 컬렉션 무제한 페이징
/API/거래/=> 1 페이지 (10 개 항목의 기본 제한) /API/거래 /? p = 2 => 2 페이지
내가 백본 경관을 감상 할 수있는 무한 스크롤 시스템을 구축하고자합니다.
이미 비 페이징 컬렉션 +보기 설정이 있습니다. 상위 뷰는 다음과 같습니다
이Backbone.View.extend({
initialize: function() {
this.collection = TransactionCollection;
this.fetch();
this.listenTo(this.collection, 'reset', this.renderEntries);
this.listenTo(this.collection, 'add', this.fetch);
this.rowViews = [];
this.render();
},
fetch: function() {
this.collection.fetch({ reset:true });
},
render: function() {
this.$el.html(template());
this.renderEntries();
return this;
},
renderEntries: function() {
this.clearEntryRows();
this.collection.each(function(item) {
var row = new TransactionItemView(item);
this.rowViews.push(row);
this.$el.find('.entry-list').append(row.render().el);
}, this);
},
clearEntryRows: function() {
this.rowViews.forEach(function(v) {
if (v.close) v.close();
});
this.rowViews = [];
},
// ...
}
이 뷰 코드 (아이 뷰 템플릿으로 자신을 렌더링, 간단한 항목들이다)의 관련 부분이다.
컬렉션은 여전히 매우 기본적인 : 지금은 페이지 매김을 추가하는 시간
var TransactionCollection = Backbone.Collection.extend({
model: Transaction,
url: '/api/transactions'
});
입니다. 각 renderEntries() 호출 후에 "MORE ..."버튼을 추가 할 것입니다. 이 단추는 콜렉션을 재설정하지 않고 다음 페이지를 가져오고 다른 renderEntries가 호출됩니다. this.clearEntryRows()가 재설정 콜백으로 이동됩니다.
내 질문은 : 어떻게하면 두 번째 페이지를 가져 와서 컬렉션을 재설정하지 않고 모델을 추가하고 그 이벤트를 차단하여 다음 항목 페이지를 렌더링 할 수 있습니까? '동기화'이벤트에 대한 내용을 읽었습니다. '리셋'은 리셋으로 가져올 때만 초기화됩니다. '사실'컬렉션을 가져올 때마다 '동기화'가 시작됩니다.
이것이 맞으면 재설정 이벤트에서만 입력 행을 삭제하고 행을 동기화하여 표시 할 수 있습니다. 하지만 새로 추가 된 행 (예 : 2 페이지) 만 내 목록에 표시하려면 어떻게해야합니까?
나는 약간 혼란 스럽다.
이 경우에는'reset' 대신'add' 이벤트 만 사용하여 컨테이너에 새 항목을 추가 할 수 있다고 생각합니다. –