问题:
我有一个定义一些数据结构的 dart 文件,我需要将其用于客户端和服务器。我想用 Polymer 使这些数据结构可观察。但是,由于 Polymer,服务器无法包含该文件,因为 Polymer 包含 dart:html
。
上下文: 我正在开发一个客户端/服务器(REST-full)应用程序,我希望服务器提供定义为资源的数据结构。客户端应该显示这些资源,并且能够将修改发送到服务器。为此,聚合物的值(value)是无价的。
我希望服务器可以使用这个库的原因是我希望服务器能够验证要存储的资源。
可能的解决方案:
我还不太了解 Polymer 的内部结构,但是如果我的数据结构可以继承自 Map
,我可以在客户端代码中使用 toObservable
来制作数据结构可观察,但我不能通过点表示法访问,而是必须通过键访问成员,这使得它相当脆弱。
我想知道是否可以使用 mirrors.dart
在客户端添加 observable
注释。
当然,管理重复代码确实不是一个解决方案。
最佳答案
您可以使用observe
包。
使用 ChangeNotifier
,您可以在值更改时调用 notifyPropertyChange
自行启动更改通知。更改会同步交付。
Observable
需要调用 dirtyCheck()
来传递更改。
Polymer 重复调用 Observable.dirtyCheck()
以自动获取更改。
每个示例
import 'package:observe/observe.dart';
class Notifiable extends Object with ChangeNotifier {
String _input = '';
@reflectable
get input => _input;
@reflectable
set input(val) {
_input = notifyPropertyChange(#input, _input, val + " new");
}
Notifiable() {
this.changes.listen((List<ChangeRecord> record) => record.forEach(print));
}
}
class MyObservable extends Observable {
@observable
String counter = '';
MyObservable() {
this.changes.listen((List<ChangeRecord> record) => record.forEach(print));
}
}
void main() {
var x = new MyObservable();
x.counter = "hallo";
Observable.dirtyCheck();
Notifiable notifiable = new Notifiable();
notifiable.input = 'xxx';
notifiable.input = 'yyy';
}
关于dart - 如何在客户端和服务器上与 Polymer 共享数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22788028/