Index: observatory_pub_packages/observe/src/bind_property.dart |
=================================================================== |
--- observatory_pub_packages/observe/src/bind_property.dart (revision 0) |
+++ observatory_pub_packages/observe/src/bind_property.dart (working copy) |
@@ -0,0 +1,39 @@ |
+// 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. |
+ |
+library observe.src.bind_property; |
+ |
+import 'dart:async'; |
+import 'package:observe/observe.dart'; |
+ |
+/// Forwards an observable property from one object to another. For example: |
+/// |
+/// class MyModel extends Observable { |
+/// 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(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; |
+ } |
+ } |
+ }); |
+} |