aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMisko Hevery2010-03-25 14:51:42 -0700
committerMisko Hevery2010-03-25 14:51:42 -0700
commit0cc9b0732003451537a5bfc444fb6590f4ed103a (patch)
tree214e0b16d1b4f7b85f803aa5e5eedc4933e6e298 /src
parent4fa166866b97d4f4dbd21514dbd674347da0a109 (diff)
downloadangular.js-0cc9b0732003451537a5bfc444fb6590f4ed103a.tar.bz2
input select-multiple now works
Diffstat (limited to 'src')
-rw-r--r--src/widgets2.js26
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(){