diff options
| author | Misko Hevery | 2010-03-25 14:51:42 -0700 |
|---|---|---|
| committer | Misko Hevery | 2010-03-25 14:51:42 -0700 |
| commit | 0cc9b0732003451537a5bfc444fb6590f4ed103a (patch) | |
| tree | 214e0b16d1b4f7b85f803aa5e5eedc4933e6e298 /src | |
| parent | 4fa166866b97d4f4dbd21514dbd674347da0a109 (diff) | |
| download | angular.js-0cc9b0732003451537a5bfc444fb6590f4ed103a.tar.bz2 | |
input select-multiple now works
Diffstat (limited to 'src')
| -rw-r--r-- | src/widgets2.js | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/widgets2.js b/src/widgets2.js index a8d17105..c4b39bc1 100644 --- a/src/widgets2.js +++ b/src/widgets2.js @@ -57,6 +57,26 @@ function radioAccessor(element) { }; } +function optionsAccessor(element) { + var options = element[0].options; + return { + get: function(){ + var values = []; + foreach(options, function(option){ + if (option.selected) values.push(option.value); + }); + return values; + }, + set: function(values){ + var keys = {}; + foreach(values, function(value){ keys[value] = true; }); + foreach(options, function(option){ + option.selected = keys[option.value]; + }); + } + }; +} + function noopAccessor() { return { get: noop, set: noop }; } var NG_ERROR = 'ng-error', @@ -74,8 +94,8 @@ var NG_ERROR = 'ng-error', 'image': buttonWidget, 'checkbox': inputWidget('click', modelAccessor, checkedAccessor, false), 'radio': inputWidget('click', modelAccessor, radioAccessor, undefined), - 'select-one': inputWidget('click', modelAccessor, valueAccessor, null) -// 'select-multiple': [[], 'change'], + 'select-one': inputWidget('click', modelAccessor, valueAccessor, null), + 'select-multiple': inputWidget('click', modelAccessor, optionsAccessor, []) // 'file': [{}, 'click'] }; @@ -85,7 +105,7 @@ function inputWidget(events, modelAccessor, viewAccessor, initValue) { model = modelAccessor(scope, element), view = viewAccessor(element), action = element.attr('ng-action') || '', - value = view.get() || initValue; + value = view.get() || copy(initValue); if (isDefined(value)) model.set(value); this.$eval(element.attr('ng-init')||''); element.bind(events, function(){ |
