Поэтому у меня есть общая библиотека с некоторыми моделями я намерен использовать на сервере, а также клиент: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.movies не приводит к обновлению привязок. В документации Полимера указано, что expressions are re-evaluated when the value of one or more paths in an expression changes.
Если я иду в models
библиотеку и добавить @observable
всех своих свойств модели, PolymerDart кажется, чтобы забрать изменения, но теперь я добавил новую зависимость в мою библиотеку моделей - и я хочу эту библиотеку для работы как на клиенте, так и на сервере, поэтому мне не нужно дублировать мою логику.
Кроме того, добавив @observable
к каждому возможному свойству, которое я могу связывать с данными, это супер избыток и довольно грязный взгляд.
Я предполагаю, что я делаю что-то неправильно здесь: что это?
'CustomCollection' не генерирует события изменения, если я расширяю Observable и добавляю аннотацию @observable в список поддержки. Разумеется, список поддержки. Я посмотрел исходный код PolymerDart и, по-видимому, они обрабатывают ObservableList иначе; вы не можете проксировать события ObservableList, потому что их не будут слушать. – ALW
После долгих исследований я решил, что нет другого способа, кроме как заразить разделяемые библиотеки с помощью @observable. – ALW