diff options
| author | Misko Hevery | 2011-07-11 12:55:29 -0700 |
|---|---|---|
| committer | Misko Hevery | 2011-07-26 09:41:42 -0700 |
| commit | c348f2cad6e2db0c3a37108eb34c8d62f2b7c718 (patch) | |
| tree | 85aba2dbc5e801c9b6c09f663c141d62829b0b9c | |
| parent | f3456dc2826e9570cf2969fab3c314255d16188f (diff) | |
| download | angular.js-c348f2cad6e2db0c3a37108eb34c8d62f2b7c718.tar.bz2 | |
fix(directive): ng:options incorrectly re-grew options on datasource change
Closes #464
| -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'}]; |
