| Index: pkg/template_binding/lib/src/template_iterator.dart
|
| diff --git a/pkg/template_binding/lib/src/template_iterator.dart b/pkg/template_binding/lib/src/template_iterator.dart
|
| index 71004867b9f16fbf768fb95412d475dfe0a52348..a2839eaaa0b10bf097e5b3e786634c268ba85e53 100644
|
| --- a/pkg/template_binding/lib/src/template_iterator.dart
|
| +++ b/pkg/template_binding/lib/src/template_iterator.dart
|
| @@ -257,20 +257,18 @@ class _TemplateIterator extends Bindable {
|
| _hasIf = directives._if != null;
|
| _hasRepeat = directives._repeat != null;
|
|
|
| - var ifValue = true;
|
| if (_hasIf) {
|
| _ifOneTime = directives._if.onlyOneTime;
|
| _ifValue = _processBinding('if', directives._if, template, model);
|
| - ifValue = _ifValue;
|
|
|
| // oneTime if & predicate is false. nothing else to do.
|
| - if (_ifOneTime && !_toBoolean(ifValue)) {
|
| - _valueChanged(null);
|
| - return;
|
| - }
|
| -
|
| - if (!_ifOneTime) {
|
| - ifValue = (ifValue as Bindable).open(_updateIfValue);
|
| + if (_ifOneTime) {
|
| + if (!_toBoolean(_ifValue)) {
|
| + _updateIteratedValue(null);
|
| + return;
|
| + }
|
| + } else {
|
| + (_ifValue as Bindable).open(_updateIteratedValue);
|
| }
|
| }
|
|
|
| @@ -282,38 +280,12 @@ class _TemplateIterator extends Bindable {
|
| _value = _processBinding('bind', directives._bind, template, model);
|
| }
|
|
|
| - var value = _value;
|
| - if (!_oneTime) {
|
| - value = _value.open(_updateIteratedValue);
|
| - }
|
| -
|
| - if (!_toBoolean(ifValue)) {
|
| - _valueChanged(null);
|
| - return;
|
| - }
|
| -
|
| - _updateValue(value);
|
| - }
|
| -
|
| - /// Gets the updated value of the bind/repeat. This can potentially call
|
| - /// user code (if a bindingDelegate is set up) so we try to avoid it if we
|
| - /// already have the value in hand (from Observer.open).
|
| - Object _getUpdatedValue() {
|
| - var value = _value;
|
| - // Dart note: x.discardChanges() is x.value in Dart.
|
| - if (!_toBoolean(_oneTime)) value = value.value;
|
| - return value;
|
| - }
|
| + if (!_oneTime) _value.open(_updateIteratedValue);
|
|
|
| - void _updateIfValue(ifValue) {
|
| - if (!_toBoolean(ifValue)) {
|
| - _valueChanged(null);
|
| - return;
|
| - }
|
| - _updateValue(_getUpdatedValue());
|
| + _updateIteratedValue(null);
|
| }
|
|
|
| - void _updateIteratedValue(value) {
|
| + void _updateIteratedValue(_) {
|
| if (_hasIf) {
|
| var ifValue = _ifValue;
|
| if (!_ifOneTime) ifValue = (ifValue as Bindable).value;
|
| @@ -323,10 +295,8 @@ class _TemplateIterator extends Bindable {
|
| }
|
| }
|
|
|
| - _updateValue(value);
|
| - }
|
| -
|
| - void _updateValue(Object value) {
|
| + var value = _value;
|
| + if (!_oneTime) value = (value as Bindable).value;
|
| if (!_hasRepeat) value = [value];
|
| _valueChanged(value);
|
| }
|
|
|