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

标签 dart dart-polymer

问题: 我有一个定义一些数据结构的 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/

相关文章:

dart - Flutter - 小部件中的部分 SlideTransition

dart - 在没有 Dart VM 的情况下将 Dart API 导出到 JavaScript

dart - 表中一行的条件模板在编辑器中显示警告

dart - 避免在 Polymer 中使用 @observable

dart - `<template repeat>` 的作用域规则是什么

dart - 从重复列表中的自定义对象访问数据

json - flutter Dart 处理json

flutter - Flutter/Dart-获取要在Text Widget中使用的PageView.Builder的索引号?

dart - 在AngularDart应用程序中包含Bootstrap的最佳方法

dart - 如何在 Dart 的 paper-input 中获得值(value)?