如何在客户端和服务器上与Polymer共享数据结构

时间:2014-04-01 13:54:08

标签: dart dart-polymer

问题: 我有一个定义一些数据结构的dart文件,我需要将它们用于客户端和服务器。我想用Polymer观察这些数据结构。但是,由于Polymer,服务器不能包含该文件,因为Polymer包含dart:html

上下文 我正在开发一个客户端/服务器(REST-full)应用程序,我希望服务器提供定义为资源的数据结构。客户端应显示这些资源,并可以将修改发送到服务器。为此,聚合物非常宝贵。

我想让这个库可用于服务器的原因是我希望服务器能够验证要存储的资源。

可能的解决方案:

我还不太了解Polymer的内部结构,但如果我的数据结构可以继承自Map,我可以在客户端代码中使用toObservable来使数据结构可观察,但不是通过点符号访问,而是必须通过键访问成员,使其变得相当脆弱。

我想知道是否可以使用mirrors.dart在客户端上添加observable注释。

当然,管理重复代码实际上不是解决方案。

1 个答案:

答案 0 :(得分:2)

您可以使用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';
}