aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMisko Hevery2011-07-11 12:55:29 -0700
committerMisko Hevery2011-07-26 09:41:42 -0700
commitc348f2cad6e2db0c3a37108eb34c8d62f2b7c718 (patch)
tree85aba2dbc5e801c9b6c09f663c141d62829b0b9c
parentf3456dc2826e9570cf2969fab3c314255d16188f (diff)
downloadangular.js-c348f2cad6e2db0c3a37108eb34c8d62f2b7c718.tar.bz2
fix(directive): ng:options incorrectly re-grew options on datasource change
Closes #464
-rw-r--r--CHANGELOG.md1
-rw-r--r--src/widgets.js5
-rw-r--r--test/widgetsSpec.js18
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'}];