diff options
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | src/widgets.js | 5 | ||||
| -rw-r--r-- | test/widgetsSpec.js | 18 | 
3 files changed, 23 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index e833ba78..52ac5c63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@  ### Bug Fixes  - Issue #449: [ng:options] should support binding to a property of an item. +- Issue #464: [ng:options] incorrectly re-grew options on datasource change  ### Breaking changes  - no longer support MMMMM in filter.date as we need to follow UNICODE LOCALE DATA formats. diff --git a/src/widgets.js b/src/widgets.js index 8fa8db4a..f8ada667 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -783,10 +783,13 @@ angularWidget('select', function(element){              }            }          } -        if (fragment) select.append(jqLite(fragment)); +        if (fragment) { +          select.append(jqLite(fragment)); +        }          // shrink children          while(optionElements.length > index) {            optionElements.pop().remove(); +          optionTexts.pop();            delete lastSelectValue[optionElements.length];          } diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js index 5d39b4ec..342dc8c5 100644 --- a/test/widgetsSpec.js +++ b/test/widgetsSpec.js @@ -672,6 +672,24 @@ describe("widget", function(){        expect(select.find('option').length).toEqual(1); // we add back the special empty option      }); +    it('should shrink and then grow list', function(){ +      createSingleSelect(); +      scope.values = [{name:'A'}, {name:'B'}, {name:'C'}]; +      scope.selected = scope.values[0]; +      scope.$eval(); +      expect(select.find('option').length).toEqual(3); + +      scope.values = [{name:'1'}, {name:'2'}]; +      scope.selected = scope.values[0]; +      scope.$eval(); +      expect(select.find('option').length).toEqual(2); + +      scope.values = [{name:'A'}, {name:'B'}, {name:'C'}]; +      scope.selected = scope.values[0]; +      scope.$eval(); +      expect(select.find('option').length).toEqual(3); +    }); +      it('should update list', function(){        createSingleSelect();        scope.values = [{name:'A'}, {name:'B'}, {name:'C'}];  | 
