在没有JsProxy的情况下使Dart-Polymer模型类可反射

时间:2016-05-05 13:38:16

标签: google-app-engine dart google-cloud-datastore dart-polymer

我在AppEngine和Dart-Polymer客户端上运行了一个dart服务器。这个想法是分享共同的逻辑,比如模型。但是,有一点问题。通常,您可以使模型类扩展JsProxy,然后使用@reflectable注释所有相关字段,以便在数据绑定中使用它们。不幸的是,与AppEngine的数据存储区一起使用的模型已经从Model继承。除此之外,我不确定服务器上是否有dart:js可用。因此,我必须找到另一种方法来使我的模型可以反映UI。

使用@reflectable注释Project#name无法正常工作。与输出相同的空div。

在模型中包含JsProxy:

  

内置库'dart:html'在独立版上不可用   VM。

有什么想法吗?

@Kind(name: 'Project', idType: IdType.Integer)
class Project extends Model {

  @StringProperty(required: true)
  String name;

}

@PolymerRegister('project-list')
class ProjectList extends PolymerElement {

  @property List<Project> projects;

  ProjectList.created() : super.created();

  ready() {
    fetchProjects();
  }
}

<dom-module id="projects-page">
  <template>
    <template is="dom-repeat" items="{{projects}}">
      <div>{{item.name}}</div>
    </template>
  </template>
</dom-module>

输出:

<div></div>

1 个答案:

答案 0 :(得分:1)

这是一个已知问题https://github.com/dart-lang/polymer-dart/issues/664

到目前为止,最好的解决方法是使用应用注释的代理对象并包装共享模型类。

class FooProxy extends JsProxy implements Foo {
  final Foo model;

  FooProxy(this.model);

  @reflectable
  int get bar => model.bar;
  set(int value) { model.bar = value}
}