feat(forms): made forms works with single controls

This commit is contained in:
vsavkin 2015-03-25 14:21:57 -07:00
parent ee36aaf163
commit b02bd65871
2 changed files with 31 additions and 7 deletions

View File

@ -59,20 +59,20 @@ export class CheckboxControlValueAccessor {
lifecycle: [onChange],
selector: '[control]',
bind: {
'controlName' : 'control'
'controlOrName' : 'control'
}
})
export class ControlDirective {
_groupDirective:ControlGroupDirective;
controlName:string;
controlOrName:any;
valueAccessor:any; //ControlValueAccessor
validator:Function;
constructor(@Ancestor() groupDirective:ControlGroupDirective, valueAccessor:DefaultValueAccessor) {
constructor(@Optional() @Ancestor() groupDirective:ControlGroupDirective, valueAccessor:DefaultValueAccessor) {
this._groupDirective = groupDirective;
this.controlName = null;
this.controlOrName = null;
this.valueAccessor = valueAccessor;
this.validator = Validators.nullValidator;
}
@ -84,7 +84,9 @@ export class ControlDirective {
}
_initialize() {
this._groupDirective.addDirective(this);
if(isPresent(this._groupDirective)) {
this._groupDirective.addDirective(this);
}
var c = this._control();
c.validator = Validators.compose([c.validator, this.validator]);
@ -102,7 +104,11 @@ export class ControlDirective {
}
_control() {
return this._groupDirective.findControl(this.controlName);
if (isString(this.controlOrName)) {
return this._groupDirective.findControl(this.controlOrName);
} else {
return this.controlOrName;
}
}
}

View File

@ -111,6 +111,24 @@ export function main() {
});
}));
it("should work with single controls", inject([AsyncTestCompleter], (async) => {
var control = new Control("loginValue");
var ctx = new MyComp(control);
var t = `<div><input type="text" [control]="form"></div>`;
compile(MyComp, t, ctx, (view) => {
var input = queryView(view, "input")
expect(input.value).toEqual("loginValue");
input.value = "updatedValue";
dispatchEvent(input, "change");
expect(control.value).toEqual("updatedValue");
async.done();
});
}));
it("should update DOM elements when rebinding the control group", inject([AsyncTestCompleter], (async) => {
var form = new ControlGroup({
"login": new Control("oldValue")
@ -376,7 +394,7 @@ export function main() {
selector: "my-comp"
})
class MyComp {
form:ControlGroup;
form:any;
name:string;
constructor(form = null, name = null) {