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