|
404 | 404 | var pageStart = currentPage * pageSize, pageEnd = pageStart + pageSize;
|
405 | 405 |
|
406 | 406 | if (event == "add") {
|
407 |
| - var fullIndex, addAt, colToAdd, options = options || {}; |
| 407 | + var pageIndex, fullIndex, addAt, colToAdd, options = options || {}; |
408 | 408 | if (collection == fullCol) {
|
409 | 409 | fullIndex = fullCol.indexOf(model);
|
410 | 410 | if (fullIndex >= pageStart && fullIndex < pageEnd) {
|
411 | 411 | colToAdd = pageCol;
|
412 |
| - addAt = fullIndex - pageStart; |
| 412 | + pageIndex = addAt = fullIndex - pageStart; |
413 | 413 | }
|
414 | 414 | }
|
415 | 415 | else {
|
416 |
| - fullIndex = pageStart + pageCol.indexOf(model); |
| 416 | + pageIndex = pageCol.indexOf(model); |
| 417 | + fullIndex = pageStart + pageIndex; |
417 | 418 | colToAdd = fullCol;
|
418 |
| - var addAt = options && !_.isUndefined(options.at) ? |
| 419 | + var addAt = !_isUndefined(options.at) ? |
419 | 420 | options.at + pageStart :
|
420 | 421 | fullIndex;
|
421 | 422 | }
|
422 | 423 |
|
423 |
| - |
424 | 424 | ++state.totalRecords;
|
425 | 425 | pageCol.state = pageCol._checkState(state);
|
426 | 426 |
|
427 | 427 | if (colToAdd) {
|
428 | 428 | colToAdd.add(model, _extend({}, options || {}, {at: addAt}));
|
429 |
| - if (pageCol.length > pageSize) { |
| 429 | + var modelToRemove = pageIndex >= pageSize ? |
| 430 | + model : |
| 431 | + !_isUndefined(options.at) && addAt < pageEnd && pageCol.length > pageSize ? |
| 432 | + pageCol.at(pageSize) : |
| 433 | + null; |
| 434 | + if (modelToRemove) { |
430 | 435 | var addHandlers = collection._events.add,
|
431 | 436 | popOptions = {onAdd: true};
|
432 | 437 | if (addHandlers.length) {
|
|
435 | 440 | lastAddHandler.callback = function () {
|
436 | 441 | try {
|
437 | 442 | oldCallback.apply(this, arguments);
|
438 |
| - pageCol.pop(popOptions); |
| 443 | + pageCol.remove(modelToRemove, popOptions); |
439 | 444 | }
|
440 | 445 | finally {
|
441 | 446 | lastAddHandler.callback = oldCallback;
|
442 | 447 | }
|
443 | 448 | };
|
444 | 449 | }
|
445 |
| - else pageCol.pop(popOptions); |
| 450 | + else pageCol.remove(modelToRemove, popOptions); |
446 | 451 | }
|
447 | 452 | }
|
448 | 453 | }
|
|
923 | 928 | if (qs = (qsi = last.indexOf('?')) ? last.slice(qsi + 1) : '') {
|
924 | 929 | var params = queryStringToParams(qs);
|
925 | 930 |
|
926 |
| - var state = _.clone(self.state); |
| 931 | + var state = _clone(self.state); |
927 | 932 | var queryParams = self.queryParams;
|
928 | 933 | var pageSize = state.pageSize;
|
929 | 934 |
|
|
0 commit comments