| Index: lib/src/emitters.dart
|
| diff --git a/lib/src/emitters.dart b/lib/src/emitters.dart
|
| index 97c37e82b5cf7b268789d2b55e8e03fe5c0f6ab3..46d6493ef8151d8d43f126a4d033636a9ad7292b 100644
|
| --- a/lib/src/emitters.dart
|
| +++ b/lib/src/emitters.dart
|
| @@ -18,6 +18,7 @@ import 'codegen.dart' as codegen;
|
| import 'file_system/path.dart';
|
| import 'files.dart';
|
| import 'html5_utils.dart';
|
| +import 'html5_setters.g.dart';
|
| import 'info.dart';
|
| import 'messages.dart';
|
| import 'utils.dart';
|
| @@ -90,10 +91,7 @@ class ElementFieldEmitter extends Emitter<ElementInfo> {
|
| ElementFieldEmitter(ElementInfo info) : super(info);
|
|
|
| void emitDeclarations(Context context) {
|
| - var type = htmlElementNames[elem.tagName];
|
| - // Note: this will eventually be the component's class name if it is a
|
| - // known x-tag.
|
| - if (type == null) type = 'UnknownElement';
|
| + var type = typeForHtmlTag(elem.tagName);
|
| context.declarations.add('autogenerated.$type ${elemInfo.identifier};');
|
| }
|
|
|
| @@ -230,23 +228,25 @@ class DataBindingEmitter extends Emitter<ElementInfo> {
|
| ''');
|
| }
|
| } else {
|
| + // Note: it is important for correctness to use the DOM setter if it
|
| + // is available. Otherwise changes will not be applied. This is most
|
| + // easily observed with "InputElement.value", ".checked", etc.
|
| + var setter = null;
|
| + var typeName = typeForHtmlTag(elem.tagName);
|
| + while (typeName != null) {
|
| + var fields = htmlElementFields[typeName];
|
| + if (fields != null) setter = fields[name];
|
| + if (setter != null) break;
|
| + typeName = htmlElementExtends[typeName];
|
| + }
|
| + if (setter == null) setter = 'attributes["$name"]';
|
| +
|
| var val = attrInfo.boundValue;
|
| var stopperName = attrInfo.stopperNames[0];
|
| - var setter;
|
| - // TODO(sigmund): use setters when they are available (issue #112)
|
| - // Need to know if an attr is known for an element.
|
| - if ((elem.tagName == 'input' &&
|
| - (name == 'value' || name == 'checked')) ||
|
| - name == 'hidden') {
|
| - setter = name;
|
| - } else {
|
| - setter = 'attributes["$name"]';
|
| - }
|
| context.insertedMethod.add('''
|
| $stopperName = autogenerated.watchAndInvoke(() => $val, (e) {
|
| $elemField.$setter = e.newValue;
|
| - });
|
| - ''');
|
| + });''');
|
| }
|
| });
|
|
|
|
|