Chromium Code Reviews| Index: lib/src/emitters.dart |
| diff --git a/lib/src/emitters.dart b/lib/src/emitters.dart |
| index ae89740bc0788355dc457d4bc8818ef7ec5cc985..5ececc4d5ffc71fe4285c1dcf70c7419c04fe828 100644 |
| --- a/lib/src/emitters.dart |
| +++ b/lib/src/emitters.dart |
| @@ -218,15 +218,21 @@ class DataBindingEmitter extends Emitter<ElementInfo> { |
| '''); |
| } |
| } else { |
| - var val = attrInfo.boundValue; |
| - var stopperName = attrInfo.stopperNames[0]; |
| + // 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; |
| - // TODO(sigmund): use setters when they are available (issue #112) |
| - if (elem.tagName == 'input' && (name == 'value' || name == 'checked')) { |
| - setter = name; |
| + var allowedTags = htmlAttributeTags[name]; |
|
Siggi Cherem (dart-lang)
2012/10/27 00:46:45
nit: maybe some alternative name? allowedTags ring
|
| + if (allowedTags == allHtmlElements || |
| + allowedTags != null && allowedTags.contains(elem.tagName)) { |
| + var renamed = elementFieldRenames[name]; |
|
Siggi Cherem (dart-lang)
2012/10/27 00:46:45
elementFieldRenames => domToDartHtml?
|
| + setter = renamed != null ? renamed : name; |
| } else { |
| - setter = 'attributes["$name"]'; |
| + setter = 'attributes["$name"]'; |
| } |
| + |
| + var val = attrInfo.boundValue; |
| + var stopperName = attrInfo.stopperNames[0]; |
| context.insertedMethod.add(''' |
| $stopperName = autogenerated.watchAndInvoke(() => $val, (e) { |
| $elemField.$setter = e.newValue; |