所以我有一些模型,我打算在服务器上使用,以及客户端共享库:PolymerDart:数据绑定模板和复杂的模型
library models;
class Model {
String id;
}
class Theatre extends Model {
String name;
// implements List<E>
CustomCollection<Movie> movies = new CustomCollection();
Theatre(this.name);
}
class Movie extends Model {
String name;
Movie(this.name);
}
我有这样的聚合物元件:
<polymer-element name="my-app">
<template>
<movie-list movies="{{theatre.movies}}"></movie-list>
<button on-click="{{moreMovies}}">More movies!</button>
</template>
<script type="application/dart" src="my_app.dart"></script>
</polymer-element>
用下面的代码背后:
import 'package:polymer/polymer.dart';
import 'package:my_app/models.dart';
@CustomTag('my-app')
class MyApp extends PolymerElement {
@observable theatre = new Theatre('Lucky Seven Cinema');
void moreMovies(event, detail, sender) {
theatre.movies.add(new Movie('The Goonies'));
}
}
PolymerDart似乎没有观察到我的属性更改:初始页面加载后,更改theatre.name或从theatre.movies添加或删除项目不会导致绑定更新。 Polymer的文档说expressions are re-evaluated when the value of one or more paths in an expression changes。
如果我进入models
库并添加@observable
我所有的模型属性,PolymerDart似乎拿起变化,但现在我已经添加了一个新的依赖我的模型库 - 我想这个库工作无论是在客户端还是服务器上,所以我不必重复自己的逻辑。
此外,将@observable
添加到每个可能的属性,我可能想要数据绑定是超级矫枉过正和相当凌乱的看看。
我假设我在这里做错了什么:它是什么?
如果我扩展了Observable并将@observable注释添加到支持列表中,那么'CustomCollection'不会发出更改事件。支持清单当然是。我查看了PolymerDart的源代码,显然它们处理ObservableList的方式不同;你不能代理一个ObservableList的事件,因为他们不会被监听。 – ALW 2014-10-11 21:53:33
经过多次调查后,我确定没有其他办法可以用@observable来感染共享库。 – ALW 2014-10-14 01:57:47