Skip to content

Commit 1b095bd

Browse files
committed
fix(collectionRepeat): don't render an extra item at the end
Closes #2027
1 parent 04812a2 commit 1b095bd

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

js/angular/service/collectionRepeatDataSource.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ function($cacheFactory, $parse, $rootScope) {
8181
attachItemAtIndex: function(index) {
8282
if (index < this.dataStartIndex) {
8383
return this.beforeSiblings[index];
84-
} else if (index > this.data.length) {
84+
} else if (index > this.data.length - 1) {
8585
return this.afterSiblings[index - this.data.length - this.dataStartIndex];
8686
}
8787

js/angular/service/collectionRepeatManager.js

+16-12
Original file line numberDiff line numberDiff line change
@@ -276,27 +276,31 @@ function($rootScope, $timeout) {
276276
// Keep rendering items, adding them until we are past the end of the visible scroll area
277277
i = renderStartIndex;
278278
while ((rect = this.dimensions[i]) && (rect.primaryPos - rect.primarySize < scrollSizeEnd)) {
279-
doRender(i++);
279+
doRender(i, rect);
280+
i++;
281+
}
282+
283+
// Render two extra items at the end as a buffer
284+
if (self.dimensions[i]) {
285+
doRender(i, self.dimensions[i]);
286+
i++;
287+
}
288+
if (self.dimensions[i]) {
289+
doRender(i, self.dimensions[i]);
280290
}
281-
//Add two more items at the end
282-
doRender(i++);
283-
doRender(i);
284291
var renderEndIndex = i;
285292

286293
// Remove any items that were rendered and aren't visible anymore
287-
for (i in this.renderedItems) {
288-
if (i < renderStartIndex || i > renderEndIndex) {
289-
this.removeItem(i);
294+
for (var renderIndex in this.renderedItems) {
295+
if (renderIndex < renderStartIndex || renderIndex > renderEndIndex) {
296+
this.removeItem(renderIndex);
290297
}
291298
}
292299

293300
this.setCurrentIndex(startIndex);
294301

295-
function doRender(dataIndex) {
296-
var rect = self.dimensions[dataIndex];
297-
if (!rect) {
298-
299-
} else if (dataIndex < self.dataSource.dataStartIndex) {
302+
function doRender(dataIndex, rect) {
303+
if (dataIndex < self.dataSource.dataStartIndex) {
300304
// do nothing
301305
} else {
302306
self.renderItem(dataIndex, rect.primaryPos - self.beforeSize, rect.secondaryPos);

0 commit comments

Comments
 (0)