diff options
| author | Misko Hevery | 2010-04-13 14:25:12 -0700 |
|---|---|---|
| committer | Misko Hevery | 2010-04-13 14:25:12 -0700 |
| commit | cd03fe92a5dbd2aba516b64fc8067c5fba1e4a81 (patch) | |
| tree | ccb69ec948074ed744559e0a167f21f0027db6ab | |
| parent | e8ac57caae624dca6509ce1619ae254ffd1fe0f4 (diff) | |
| download | angular.js-cd03fe92a5dbd2aba516b64fc8067c5fba1e4a81.tar.bz2 | |
checkbox widget fix
| -rw-r--r-- | angular-debug.js | 11 | ||||
| -rw-r--r-- | src/services.js | 7 | ||||
| -rw-r--r-- | src/widgets.js | 4 | ||||
| -rw-r--r-- | test/widgetsSpec.js | 11 |
4 files changed, 26 insertions, 7 deletions
diff --git a/angular-debug.js b/angular-debug.js index c96947a3..897db442 100644 --- a/angular-debug.js +++ b/angular-debug.js @@ -3185,13 +3185,13 @@ function valueAccessor(scope, element) { } function checkedAccessor(scope, element) { - var domElement = element[0]; + var domElement = element[0], elementValue = domElement.value; return { get: function(){ return !!domElement.checked; }, set: function(value){ - domElement.checked = !!value; + domElement.checked = toBoolean(value); } }; } @@ -3444,8 +3444,13 @@ angularService("$location", function(browser){ scope.$root.$eval(); }); parse(browser.getUrl()); + var lastURL; this.$onEval(PRIORITY_LAST, function(){ - browser.setUrl(toString()); + var url = toString(); + if (lastURL != url) { + browser.setUrl(url); + lastURL = url; + } }); return location; }, {inject: ['$browser']}); diff --git a/src/services.js b/src/services.js index e91a8eca..11453338 100644 --- a/src/services.js +++ b/src/services.js @@ -44,8 +44,13 @@ angularService("$location", function(browser){ scope.$root.$eval(); }); parse(browser.getUrl()); + var lastURL; this.$onEval(PRIORITY_LAST, function(){ - browser.setUrl(toString()); + var url = toString(); + if (lastURL != url) { + browser.setUrl(url); + lastURL = url; + } }); return location; }, {inject: ['$browser']}); diff --git a/src/widgets.js b/src/widgets.js index b281ac2e..28798c1b 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -49,13 +49,13 @@ function valueAccessor(scope, element) { } function checkedAccessor(scope, element) { - var domElement = element[0]; + var domElement = element[0], elementValue = domElement.value; return { get: function(){ return !!domElement.checked; }, set: function(value){ - domElement.checked = !!value; + domElement.checked = toBoolean(value); } }; } diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js index c64f03ca..04b8b1ec 100644 --- a/test/widgetsSpec.js +++ b/test/widgetsSpec.js @@ -6,9 +6,10 @@ describe("input widget", function(){ scope = null; element = null; var compiler = new Compiler(angularTextMarkup, angularAttrMarkup, angularDirective, angularWidget); - compile = function(html) { + compile = function(html, before) { element = jqLite(html); scope = compiler.compile(element)(element); + (before||noop)(); scope.$init(); }; }); @@ -51,6 +52,14 @@ describe("input widget", function(){ expect(scope.$get('list')).toEqual(['1', '2', '3']); }); + it("should process ng-format for booleans", function(){ + compile('<input type="checkbox" name="name" value="true" ng-format="boolean"/>', function(){ + scope.name = false; + }); + expect(scope.name).toEqual(false); + expect(scope.$element[0].checked).toEqual(false); + }); + it("should process ng-validation", function(){ compile('<input type="text" name="price" value="abc" ng-validate="number"/>'); expect(element.hasClass('ng-validation-error')).toBeTruthy(); |
