blob: c35bfb9471b8211fba68568214db3920ab02e59f [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 observe;
/**
* Forwards an observable property from one object to another. For example:
*
* class MyModel extends ObservableBase {
* StreamSubscription _sub;
* MyOtherModel _otherModel;
*
* MyModel() {
* ...
* _sub = onPropertyChange(_otherModel, const Symbol('value'),
* () => notifyProperty(this, const Symbol('prop'));
* }
*
* String get prop => _otherModel.value;
* set prop(String value) { _otherModel.value = value; }
* }
*
* See also [notifyProperty].
*/
// TODO(jmesserly): make this an instance method?
StreamSubscription onPropertyChange(Observable source, Symbol sourceName,
void callback()) {
return source.changes.listen((records) {
for (var record in records) {
if (record.changes(sourceName)) {
callback();
}
}
});
}