blob: 7f1df9113c4530e60b6c5063244b7dac34215b79 [file] [log] [blame]
// Copyright (c) 2016, 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.
library observe.src.bind_property;
import 'dart:async';
import 'package:observable/observable.dart' as obs;
/// Forwards an observable property from one object to another. For example:
///
/// class MyModel extends AutoObservable {
/// StreamSubscription _sub;
/// MyOtherModel _otherModel;
///
/// MyModel() {
/// ...
/// _sub = onPropertyChange(_otherModel, #value,
/// () => notifyPropertyChange(#prop, oldValue, newValue);
/// }
///
/// String get prop => _otherModel.value;
/// set prop(String value) { _otherModel.value = value; }
/// }
///
/// See also [notifyPropertyChange].
// TODO(jmesserly): make this an instance method?
StreamSubscription onPropertyChange(
obs.Observable source, Symbol sourceName, void callback()) {
return source.changes.listen((records) {
for (var record in records) {
if (record is obs.PropertyChangeRecord && record.name == sourceName) {
callback();
break;
}
}
});
}