Index: pkg/polymer_expressions/lib/polymer_expressions.dart |
=================================================================== |
--- pkg/polymer_expressions/lib/polymer_expressions.dart (revision 37373) |
+++ pkg/polymer_expressions/lib/polymer_expressions.dart (working copy) |
@@ -143,8 +143,6 @@ |
}; |
} |
- // We have an ident, so it's a bind/as or repeat/in expression |
- assert(templateBind(template).templateInstance == null); |
return (model) { |
var existingScope = _scopes[template]; |
if (existingScope != null) { |
@@ -257,15 +255,13 @@ |
typedef Object _Converter(Object); |
class _Binding extends Bindable { |
- static int __seq = 1; |
- |
- final int _seq = __seq++; |
- |
final Scope _scope; |
final _Converter _converter; |
final Expression _expr; |
+ |
Function _callback; |
StreamSubscription _sub; |
+ ExpressionObserver _observer; |
var _value; |
_Binding(this._expr, this._scope, [converter]) |
@@ -311,19 +307,19 @@ |
if (_callback != null) throw new StateError('already open'); |
_callback = callback; |
- final expr = observe(_expr, _scope); |
-// _expr = expr; |
- _sub = expr.onUpdate.listen(_check)..onError((e, s) { |
+ _observer = observe(_expr, _scope); |
+ _sub = _observer.onUpdate.listen(_check)..onError((e, s) { |
new Completer().completeError( |
- "Error evaluating expression '$expr': $e", s); |
+ "Error evaluating expression '$_observer': $e", s); |
}); |
+ |
try { |
// this causes a call to _updateValue with the new value |
- update(expr, _scope); |
- _check(expr.currentValue, skipChanges: true); |
+ update(_observer, _scope); |
+ _check(_observer.currentValue, skipChanges: true); |
} catch (e, s) { |
new Completer().completeError( |
- "Error evaluating expression '$expr': $e", s); |
+ "Error evaluating expression '$_observer': $e", s); |
} |
return _value; |
} |
@@ -334,6 +330,9 @@ |
_sub.cancel(); |
_sub = null; |
_callback = null; |
+ |
+ new Closer().visit(_observer); |
+ _observer = null; |
} |
} |