|
520 | 520 |
|
521 | 521 | //From view --> model
|
522 | 522 | ngModel.$parsers.unshift(function (inputValue) {
|
523 |
| - var locals = {}; |
524 |
| - locals[$select.parserResult.itemName] = inputValue; |
525 |
| - var result = $select.parserResult.modelMapper(scope, locals); |
526 |
| - return result; |
| 523 | + var locals = {}, |
| 524 | + result; |
| 525 | + if ($select.multiple){ |
| 526 | + var resultMultiple = []; |
| 527 | + for (var j = inputValue.length - 1; j >= 0; j--) { |
| 528 | + locals = {}; |
| 529 | + locals[$select.parserResult.itemName] = inputValue[j]; |
| 530 | + result = $select.parserResult.modelMapper(scope, locals); |
| 531 | + resultMultiple.unshift(result); |
| 532 | + } |
| 533 | + return resultMultiple; |
| 534 | + }else{ |
| 535 | + locals = {}; |
| 536 | + locals[$select.parserResult.itemName] = inputValue; |
| 537 | + result = $select.parserResult.modelMapper(scope, locals); |
| 538 | + return result; |
| 539 | + } |
527 | 540 | });
|
528 | 541 |
|
529 | 542 | //From model --> view
|
530 | 543 | ngModel.$formatters.unshift(function (inputValue) {
|
531 |
| - var data = $select.parserResult.source(scope); |
| 544 | + var data = $select.parserResult.source(scope), |
| 545 | + locals = {}, |
| 546 | + result; |
532 | 547 | if (data){
|
533 |
| - for (var i = data.length - 1; i >= 0; i--) { |
534 |
| - var locals = {}; |
535 |
| - locals[$select.parserResult.itemName] = data[i]; |
536 |
| - var result = $select.parserResult.modelMapper(scope, locals); |
537 |
| - if (result == inputValue){ |
538 |
| - return data[i]; |
| 548 | + if ($select.multiple){ |
| 549 | + var resultMultiple = []; |
| 550 | + for (var k = data.length - 1; k >= 0; k--) { |
| 551 | + locals = {}; |
| 552 | + locals[$select.parserResult.itemName] = data[k]; |
| 553 | + result = $select.parserResult.modelMapper(scope, locals); |
| 554 | + for (var j = inputValue.length - 1; j >= 0; j--) { |
| 555 | + if (result == inputValue[j]){ |
| 556 | + resultMultiple.push(data[k]); |
| 557 | + break; |
| 558 | + } |
| 559 | + } |
| 560 | + } |
| 561 | + return resultMultiple; |
| 562 | + }else{ |
| 563 | + for (var i = data.length - 1; i >= 0; i--) { |
| 564 | + locals = {}; |
| 565 | + locals[$select.parserResult.itemName] = data[i]; |
| 566 | + result = $select.parserResult.modelMapper(scope, locals); |
| 567 | + if (result == inputValue){ |
| 568 | + return data[i]; |
| 569 | + } |
539 | 570 | }
|
540 | 571 | }
|
541 | 572 | }
|
|
666 | 697 | $select.resetSearchInput = resetSearchInput !== undefined ? resetSearchInput : true;
|
667 | 698 | });
|
668 | 699 |
|
669 |
| - scope.$watch('$select.selected', function(newValue) { |
670 |
| - if (ngModel.$viewValue !== newValue) { |
671 |
| - ngModel.$setViewValue(newValue); |
672 |
| - } |
673 |
| - if($select.multiple) $select.sizeSearchInput(); |
674 |
| - },$select.multiple); //Do depth watch if multiple |
675 |
| - |
676 |
| - if ($select.multiple) focusser.prop('disabled', true); //Focusser isn't needed if multiple |
| 700 | + if ($select.multiple){ |
| 701 | + scope.$watchCollection('$select.selected', function(newValue) { |
| 702 | + ngModel.$setViewValue(newValue, null, true); //Third parameter (revalidate) is true, to force $parsers to recreate model |
| 703 | + }); |
| 704 | + focusser.prop('disabled', true); //Focusser isn't needed if multiple |
| 705 | + }else{ |
| 706 | + scope.$watch('$select.selected', function(newValue) { |
| 707 | + if (ngModel.$viewValue !== newValue) { |
| 708 | + ngModel.$setViewValue(newValue); |
| 709 | + } |
| 710 | + }); |
| 711 | + } |
677 | 712 |
|
678 | 713 | ngModel.$render = function() {
|
679 | 714 | if($select.multiple){
|
|
0 commit comments