|
91 | 91 | return params;
|
92 | 92 | }
|
93 | 93 |
|
| 94 | + // hack to make sure the whatever event handlers for this event is run |
| 95 | + // before func is, and the event handlers that func will trigger. |
| 96 | + function runOnceAtLastHandler (col, event, func) { |
| 97 | + var eventHandlers = col._events[event]; |
| 98 | + if (eventHandlers && eventHandlers.length) { |
| 99 | + var lastHandler = eventHandlers[eventHandlers.length - 1]; |
| 100 | + var oldCallback = lastHandler.callback; |
| 101 | + lastHandler.callback = function () { |
| 102 | + try { |
| 103 | + oldCallback.apply(this, arguments); |
| 104 | + func(); |
| 105 | + } |
| 106 | + catch (e) { |
| 107 | + throw e; |
| 108 | + } |
| 109 | + finally { |
| 110 | + lastHandler.callback = oldCallback; |
| 111 | + } |
| 112 | + }; |
| 113 | + } |
| 114 | + else func(); |
| 115 | + } |
| 116 | + |
94 | 117 | var PARAM_TRIM_RE = /[\s'"]/g;
|
95 | 118 | var URL_TRIM_RE = /[<>\s'"]/g;
|
96 | 119 |
|
|
413 | 436 | pageCol.at(pageSize) :
|
414 | 437 | null;
|
415 | 438 | if (modelToRemove) {
|
416 |
| - var addHandlers = collection._events.add || [], |
417 |
| - popOptions = {onAdd: true}; |
418 |
| - if (addHandlers.length) { |
419 |
| - var lastAddHandler = addHandlers[addHandlers.length - 1]; |
420 |
| - var oldCallback = lastAddHandler.callback; |
421 |
| - lastAddHandler.callback = function () { |
422 |
| - try { |
423 |
| - oldCallback.apply(this, arguments); |
424 |
| - pageCol.remove(modelToRemove, popOptions); |
425 |
| - } |
426 |
| - finally { |
427 |
| - lastAddHandler.callback = oldCallback; |
428 |
| - } |
429 |
| - }; |
430 |
| - } |
431 |
| - else pageCol.remove(modelToRemove, popOptions); |
| 439 | + var popOptions = {onAdd: true}; |
| 440 | + runOnceAtLastHandler(collection, event, function () { |
| 441 | + pageCol.remove(modelToRemove, popOptions); |
| 442 | + }); |
432 | 443 | }
|
433 | 444 | }
|
434 | 445 | }
|
|
450 | 461 |
|
451 | 462 | var nextModel, removedIndex = options.index;
|
452 | 463 | if (collection == pageCol) {
|
453 |
| - if (nextModel = fullCol.at(pageEnd)) pageCol.push(nextModel); |
| 464 | + if (nextModel = fullCol.at(pageEnd)) { |
| 465 | + runOnceAtLastHandler(pageCol, event, function () { |
| 466 | + pageCol.push(nextModel); |
| 467 | + }); |
| 468 | + } |
454 | 469 | fullCol.remove(model);
|
455 | 470 | }
|
456 | 471 | else if (removedIndex >= pageStart && removedIndex < pageEnd) {
|
|
468 | 483 | collection = model;
|
469 | 484 |
|
470 | 485 | // Reset that's not a result of getPage
|
471 |
| - if (collection === pageCol && options.from == null && |
| 486 | + if (collection == pageCol && options.from == null && |
472 | 487 | options.to == null) {
|
473 | 488 | var head = fullCol.models.slice(0, pageStart);
|
474 | 489 | var tail = fullCol.models.slice(pageStart + pageCol.models.length);
|
475 | 490 | fullCol.reset(head.concat(pageCol.models).concat(tail), options);
|
476 | 491 | }
|
477 |
| - else if (collection === fullCol) { |
| 492 | + else if (collection == fullCol) { |
478 | 493 | if (!(state.totalRecords = fullCol.models.length)) {
|
479 | 494 | state.totalRecords = null;
|
480 | 495 | state.totalPages = null;
|
|
0 commit comments