Chromium Code Reviews| Index: pkg/polymer_expressions/lib/polymer_expressions.dart |
| diff --git a/pkg/polymer_expressions/lib/polymer_expressions.dart b/pkg/polymer_expressions/lib/polymer_expressions.dart |
| index ac939d8ecb914ca496a07bf9012e5daa8cd48b1e..81736c8ed4276760a21f77a3cd26365e0ebbc9f6 100644 |
| --- a/pkg/polymer_expressions/lib/polymer_expressions.dart |
| +++ b/pkg/polymer_expressions/lib/polymer_expressions.dart |
| @@ -110,11 +110,13 @@ class _Binding extends Bindable { |
| StreamSubscription _sub; |
| var _value; |
| - _Binding(this._expr, this._scope, [this._converter]); |
| + _Binding(this._expr, this._scope, [converter]) |
| + : _converter = converter == null ? _identity : converter; |
| static _oneTime(Expression expr, Scope scope, [converter]) { |
| try { |
| - return _convertValue(eval(expr, scope), scope, converter); |
| + var v = eval(expr, scope); |
| + return converter == null ? v : converter(v); |
| } catch (e, s) { |
| new Completer().completeError( |
| "Error evaluating expression '$expr': $e", s); |
| @@ -122,20 +124,11 @@ class _Binding extends Bindable { |
| return null; |
| } |
| - _setValue(v) { |
| + _check(v, {bool skipChanges: false}) { |
|
Siggi Cherem (dart-lang)
2014/05/30 21:36:03
this rename is not necessary, but it makes the cod
justinfagnani
2014/05/30 22:58:33
Please make as few changes as possible, it makes m
Jennifer Messerly
2014/05/30 23:00:56
yeah, sorry about rebase difficulty.
But I just w
|
| var oldValue = _value; |
| - _value = _convertValue(v, _scope, _converter); |
| - if (_callback != null && oldValue != _value) _callback(_value); |
| - } |
| - |
| - static _convertValue(v, scope, converter) { |
| - if (v is Comprehension) { |
| - // convert the Comprehension into a list of scopes with the loop |
| - // variable added to the scope |
| - return v.iterable.map((i) => scope.childScope(v.identifier, i)) |
| - .toList(growable: false); |
| - } else { |
| - return converter == null ? v : converter(v); |
| + _value = _converter(v); |
| + if (!skipChanges && _callback != null && oldValue != _value) { |
| + _callback(_value); |
| } |
| } |
| @@ -147,7 +140,7 @@ class _Binding extends Bindable { |
| set value(v) { |
| try { |
| var newValue = assign(_expr, v, _scope); |
| - _value = _convertValue(newValue, _scope, _converter); |
| + _check(newValue, skipChanges: true); |
| } catch (e, s) { |
| new Completer().completeError( |
| "Error evaluating expression '$_expr': $e", s); |
| @@ -160,13 +153,13 @@ class _Binding extends Bindable { |
| _callback = callback; |
| final expr = observe(_expr, _scope); |
| _expr = expr; |
| - _sub = expr.onUpdate.listen(_setValue)..onError((e, s) { |
| + _sub = expr.onUpdate.listen(_check)..onError((e, s) { |
| new Completer().completeError( |
| "Error evaluating expression '$expr': $e", s); |
| }); |
| try { |
| update(expr, _scope); |
| - _value = _convertValue(expr.currentValue, _scope, _converter); |
| + _check(expr.currentValue, skipChanges: true); |
| } catch (e, s) { |
| new Completer().completeError( |
| "Error evaluating expression '$expr': $e", s); |
| @@ -183,3 +176,5 @@ class _Binding extends Bindable { |
| _callback = null; |
| } |
| } |
| + |
| +_identity(x) => x; |