|
420 | 420 | var sortFn = this._sortFn || |
421 | 421 | function(a, b) { return self._keySort(a, b); }; |
422 | 422 | // Dedupe added and removed keys to a final added/removed map |
423 | | - splices.forEach(function(s) { |
424 | | - for (var i=0; i<s.removed.length; i++) { |
425 | | - var key = s.removed[i]; |
| 423 | + for (var i=0, s; (i<splices.length) && (s=splices[i]); i++) { |
| 424 | + for (var j=0; j<s.removed.length; j++) { |
| 425 | + var key = s.removed[j]; |
426 | 426 | keyMap[key] = keyMap[key] ? null : -1; |
427 | 427 | } |
428 | | - for (var i=0; i<s.added.length; i++) { |
429 | | - var key = s.added[i]; |
| 428 | + for (var j=0; j<s.added.length; j++) { |
| 429 | + var key = s.added[j]; |
430 | 430 | keyMap[key] = keyMap[key] ? null : 1; |
431 | 431 | } |
432 | | - }, this); |
| 432 | + } |
433 | 433 | // Convert added/removed key map to added/removed arrays |
434 | 434 | var removedIdxs = []; |
435 | 435 | var addedKeys = []; |
|
514 | 514 | _applySplicesArrayOrder: function(splices) { |
515 | 515 | var pool = []; |
516 | 516 | var c = this.collection; |
517 | | - splices.forEach(function(s) { |
| 517 | + for (var i=0, s; (i<splices.length) && (s=splices[i]); i++) { |
518 | 518 | // Detach & pool removed instances |
519 | | - for (var i=0; i<s.removed.length; i++) { |
520 | | - var inst = this._detachRow(s.index + i); |
| 519 | + for (var j=0; j<s.removed.length; j++) { |
| 520 | + var inst = this._detachRow(s.index + j); |
521 | 521 | if (!inst.isPlaceholder) { |
522 | 522 | pool.push(inst); |
523 | 523 | } |
524 | 524 | } |
525 | 525 | this._instances.splice(s.index, s.removed.length); |
526 | 526 | // Insert placeholders for new rows |
527 | | - for (var i=0; i<s.addedKeys.length; i++) { |
| 527 | + for (var j=0; j<s.addedKeys.length; j++) { |
528 | 528 | var inst = { |
529 | 529 | isPlaceholder: true, |
530 | | - key: s.addedKeys[i] |
| 530 | + key: s.addedKeys[j] |
531 | 531 | }; |
532 | | - this._instances.splice(s.index + i, 0, inst); |
| 532 | + this._instances.splice(s.index + j, 0, inst); |
533 | 533 | } |
534 | | - }, this); |
| 534 | + } |
535 | 535 | // Replace placeholders with actual instances (from pool or newly created) |
536 | 536 | // Iterate backwards to ensure insertBefore refrence is never a placeholder |
537 | 537 | for (var i=this._instances.length-1; i>=0; i--) { |
|
619 | 619 | // Called as side-effect of a host property change, responsible for |
620 | 620 | // notifying parent path change on each inst |
621 | 621 | _forwardParentProp: function(prop, value) { |
622 | | - this._instances.forEach(function(inst) { |
| 622 | + var i$ = this._instances; |
| 623 | + for (var i=0, inst; (i<i$.length) && (inst=i$[i]); i++) { |
623 | 624 | inst.__setProperty(prop, value, true); |
624 | | - }, this); |
| 625 | + } |
625 | 626 | }, |
626 | 627 |
|
627 | 628 | // Implements extension point from Templatizer |
628 | 629 | // Called as side-effect of a host path change, responsible for |
629 | 630 | // notifying parent path change on each inst |
630 | 631 | _forwardParentPath: function(path, value) { |
631 | | - this._instances.forEach(function(inst) { |
| 632 | + var i$ = this._instances; |
| 633 | + for (var i=0, inst; (i<i$.length) && (inst=i$[i]); i++) { |
632 | 634 | inst._notifyPath(path, value, true); |
633 | | - }, this); |
| 635 | + } |
634 | 636 | }, |
635 | 637 |
|
636 | 638 | // Called as a side effect of a host items.<key>.<path> path change, |
|
0 commit comments