Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(419)

Side by Side Diff: pkg/observe/lib/observe.dart

Issue 817483003: delete observe from the repo (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/observe/lib/mirrors_used.dart ('k') | pkg/observe/lib/src/bind_property.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 /// Support for observing changes in model-view architectures.
6 ///
7 /// **Warning:** This library is experimental, and APIs are subject to change.
8 ///
9 /// This library is used to observe changes to [Observable] types. It also
10 /// has helpers to make implementing and using [Observable] objects easy.
11 ///
12 /// You can provide an observable object in two ways. The simplest way is to
13 /// use dirty checking to discover changes automatically:
14 ///
15 /// import 'package:observe/observe.dart';
16 /// import 'package:observe/mirrors_used.dart'; // for smaller code
17 ///
18 /// class Monster extends Unit with Observable {
19 /// @observable int health = 100;
20 ///
21 /// void damage(int amount) {
22 /// print('$this takes $amount damage!');
23 /// health -= amount;
24 /// }
25 ///
26 /// toString() => 'Monster with $health hit points';
27 /// }
28 ///
29 /// main() {
30 /// var obj = new Monster();
31 /// obj.changes.listen((records) {
32 /// print('Changes to $obj were: $records');
33 /// });
34 /// // No changes are delivered until we check for them
35 /// obj.damage(10);
36 /// obj.damage(20);
37 /// print('dirty checking!');
38 /// Observable.dirtyCheck();
39 /// print('done!');
40 /// }
41 ///
42 /// A more sophisticated approach is to implement the change notification
43 /// manually. This avoids the potentially expensive [Observable.dirtyCheck]
44 /// operation, but requires more work in the object:
45 ///
46 /// import 'package:observe/observe.dart';
47 /// import 'package:observe/mirrors_used.dart'; // for smaller code
48 ///
49 /// class Monster extends Unit with ChangeNotifier {
50 /// int _health = 100;
51 /// @reflectable get health => _health;
52 /// @reflectable set health(val) {
53 /// _health = notifyPropertyChange(#health, _health, val);
54 /// }
55 ///
56 /// void damage(int amount) {
57 /// print('$this takes $amount damage!');
58 /// health -= amount;
59 /// }
60 ///
61 /// toString() => 'Monster with $health hit points';
62 /// }
63 ///
64 /// main() {
65 /// var obj = new Monster();
66 /// obj.changes.listen((records) {
67 /// print('Changes to $obj were: $records');
68 /// });
69 /// // Schedules asynchronous delivery of these changes
70 /// obj.damage(10);
71 /// obj.damage(20);
72 /// print('done!');
73 /// }
74 ///
75 /// **Note**: by default this package uses mirrors to access getters and setters
76 /// marked with `@reflectable`. Dart2js disables tree-shaking if there are any
77 /// uses of mirrors, unless you declare how mirrors are used (via the
78 /// [MirrorsUsed](https://api.dartlang.org/apidocs/channels/stable/#dart-mirrors .MirrorsUsed)
79 /// annotation).
80 ///
81 /// As of version 0.10.0, this package doesn't declare `@MirrorsUsed`. This is
82 /// because we intend to use mirrors for development time, but assume that
83 /// frameworks and apps that use this pacakge will either generate code that
84 /// replaces the use of mirrors, or add the `@MirrorsUsed` declaration
85 /// themselves. For convenience, you can import
86 /// `package:observe/mirrors_used.dart` as shown on the first example above.
87 /// That will add a `@MirrorsUsed` annotation that preserves properties and
88 /// classes labeled with `@reflectable` and properties labeled with
89 /// `@observable`.
90 ///
91 /// If you are using the `package:observe/mirrors_used.dart` import, you can
92 /// also make use of `@reflectable` on your own classes and dart2js will
93 /// preserve all of its members for reflection.
94 ///
95 /// [Tools](https://www.dartlang.org/polymer-dart/) exist to convert the first
96 /// form into the second form automatically, to get the best of both worlds.
97 library observe;
98
99 // This library contains code ported from observe-js:
100 // https://github.com/Polymer/observe-js/blob/0152d542350239563d0f2cad39d22d3254 bd6c2a/src/observe.js
101 // We port what is needed for data bindings. Most of the functionality is
102 // ported, except where differences are needed for Dart's Observable type.
103
104 export 'src/bindable.dart';
105 export 'src/bind_property.dart';
106 export 'src/change_notifier.dart';
107 export 'src/change_record.dart';
108 export 'src/list_path_observer.dart';
109 export 'src/list_diff.dart' show ListChangeRecord;
110 export 'src/metadata.dart';
111 export 'src/observable.dart' hide notifyPropertyChangeHelper;
112 export 'src/observable_box.dart';
113 export 'src/observable_list.dart';
114 export 'src/observable_map.dart';
115 export 'src/observer_transform.dart';
116 export 'src/path_observer.dart' hide getSegmentsOfPropertyPathForTesting;
117 export 'src/to_observable.dart';
OLDNEW
« no previous file with comments | « pkg/observe/lib/mirrors_used.dart ('k') | pkg/observe/lib/src/bind_property.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698