【问题标题】:How to share data structures with Polymer on both client and server如何在客户端和服务器上与 Polymer 共享数据结构
【发布时间】:2014-04-19 13:14:51
【问题描述】:

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

背景: 我正在开发一个客户端/服务器(REST-full)应用程序,我希望服务器提供定义为资源的数据结构。客户端应该显示这些资源,并有可能将修改发送到服务器。为此,聚合物是无价的。

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

可能的解决方案:

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

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

当然,管理重复代码,真的不是解决办法。

【问题讨论】:

    标签: dart dart-polymer


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我还没习惯自动导入。
    • 注意:this.changes.listen ... 部分仅在您希望自己收到更改通知时才需要。聚合物不需要它 - 只是为了确定 ;-)。
    • 您好 tusj,您可能想查看 pub.dartlang.org/packages/model_map 的库。
    猜你喜欢
    • 1970-01-01
    • 2020-05-16
    • 2011-11-24
    • 1970-01-01
    • 2016-08-02
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多