blob: 484a900f9b7faf66589114b91ef3b84c6ea0f318 [file] [log] [blame]
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
part of mdv_observe;
// TODO(jmesserly): should the property name be configurable?
// That would be more convenient.
/**
* An observable box that holds a value. Use this if you want to store a single
* value. For other cases, it is better to use [ObservableList],
* [ObservableMap], or a custom [Observable] implementation based on
* [ObservableMixin]. The property name for changes is "value".
*/
class ObservableBox<T> extends ObservableBase {
static const _VALUE = const Symbol('value');
T _value;
ObservableBox([T initialValue]) : _value = initialValue;
T get value => _value;
void set value(T newValue) {
_value = notifyPropertyChange(_VALUE, _value, newValue);
}
String toString() => '#<$runtimeType value: $value>';
getValueWorkaround(key) {
if (key == _VALUE) return value;
return null;
}
void setValueWorkaround(key, newValue) {
if (key == _VALUE) value = newValue;
}
}