blob: a31d1ab747c5875fc39825656416109e404673db [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 Observable {
* StreamSubscription _sub;
* MyOtherModel _otherModel;
*
* MyModel() {
* ...
* _sub = onPropertyChange(_otherModel, #value,
* () => notifyProperty(this, #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 is PropertyChangeRecord &&
(record as PropertyChangeRecord).name == sourceName) {
callback();
break;
}
}
});
}