mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-05-10 07:44:43 +00:00
input select-multiple now works
This commit is contained in:
parent
4fa166866b
commit
0cc9b07320
2 changed files with 36 additions and 6 deletions
|
|
@ -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 }; }
|
function noopAccessor() { return { get: noop, set: noop }; }
|
||||||
|
|
||||||
var NG_ERROR = 'ng-error',
|
var NG_ERROR = 'ng-error',
|
||||||
|
|
@ -74,8 +94,8 @@ var NG_ERROR = 'ng-error',
|
||||||
'image': buttonWidget,
|
'image': buttonWidget,
|
||||||
'checkbox': inputWidget('click', modelAccessor, checkedAccessor, false),
|
'checkbox': inputWidget('click', modelAccessor, checkedAccessor, false),
|
||||||
'radio': inputWidget('click', modelAccessor, radioAccessor, undefined),
|
'radio': inputWidget('click', modelAccessor, radioAccessor, undefined),
|
||||||
'select-one': inputWidget('click', modelAccessor, valueAccessor, null)
|
'select-one': inputWidget('click', modelAccessor, valueAccessor, null),
|
||||||
// 'select-multiple': [[], 'change'],
|
'select-multiple': inputWidget('click', modelAccessor, optionsAccessor, [])
|
||||||
// 'file': [{}, 'click']
|
// 'file': [{}, 'click']
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -85,7 +105,7 @@ function inputWidget(events, modelAccessor, viewAccessor, initValue) {
|
||||||
model = modelAccessor(scope, element),
|
model = modelAccessor(scope, element),
|
||||||
view = viewAccessor(element),
|
view = viewAccessor(element),
|
||||||
action = element.attr('ng-action') || '',
|
action = element.attr('ng-action') || '',
|
||||||
value = view.get() || initValue;
|
value = view.get() || copy(initValue);
|
||||||
if (isDefined(value)) model.set(value);
|
if (isDefined(value)) model.set(value);
|
||||||
this.$eval(element.attr('ng-init')||'');
|
this.$eval(element.attr('ng-init')||'');
|
||||||
element.bind(events, function(){
|
element.bind(events, function(){
|
||||||
|
|
|
||||||
|
|
@ -148,14 +148,12 @@ describe("input widget", function(){
|
||||||
expect(model.clicked).toEqual(1);
|
expect(model.clicked).toEqual(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should type="radio"', function(){
|
it('should type="select-one"', function(){
|
||||||
compile(
|
compile(
|
||||||
'<select name="selection">' +
|
'<select name="selection">' +
|
||||||
'<option>A</option>' +
|
'<option>A</option>' +
|
||||||
'<option selected>B</option>' +
|
'<option selected>B</option>' +
|
||||||
'</select>');
|
'</select>');
|
||||||
expect(element[0].selectedIndex).toEqual(1);
|
|
||||||
expect(element[0].value).toEqual('B');
|
|
||||||
expect(model.selection).toEqual('B');
|
expect(model.selection).toEqual('B');
|
||||||
model.selection = 'A';
|
model.selection = 'A';
|
||||||
model.$updateView();
|
model.$updateView();
|
||||||
|
|
@ -163,6 +161,18 @@ describe("input widget", function(){
|
||||||
expect(element[0].childNodes[0].selected).toEqual(true);
|
expect(element[0].childNodes[0].selected).toEqual(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should type="select-multiple"', function(){
|
||||||
|
compile(
|
||||||
|
'<select name="selection" multiple>' +
|
||||||
|
'<option>A</option>' +
|
||||||
|
'<option selected>B</option>' +
|
||||||
|
'</select>');
|
||||||
|
expect(model.selection).toEqual(['B']);
|
||||||
|
model.selection = ['A'];
|
||||||
|
model.$updateView();
|
||||||
|
expect(element[0].childNodes[0].selected).toEqual(true);
|
||||||
|
});
|
||||||
|
|
||||||
it('should report error on missing field', function(){
|
it('should report error on missing field', function(){
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue