Как вы создаете наблюдаемое производное свойство в Dart / Polymer Dart?
У меня есть компонент, с которым я хочу связать другой класс CSS на основе логического значения. В моем коде компонента есть следующее:
bindCssClass(div, "open", this, "task.isOpen");
bindCssClass(div, "closed", this, 'task.isClosed');
Где isOpen / isClosed определяются следующим образом:
@observable bool isOpen = true;
get isClosed => !isOpen;
Вопрос в том, как я могу получить isClosed, чтобы его можно было наблюдать, но на основе изменений в isOpen? Я хотел бы знать этот случай, но также и для случаев, которые являются более сложными (например, строка, полученная из нескольких компонентов)
Кроме того, есть ли лучший способ использовать bindCss для такого простого случая? Привязка к '! Task.isOpen' не работает, хотя было бы неплохо, если бы это произошло.
1 ответ
Вы можете проверить пример observable_getter из github repo dart-Polymer-Dart-examples.
class App extends Object with ObservableMixin {
@observable
DateTime timestamp;
App() {
bindProperty(this, const Symbol('timestamp'),
() => notifyProperty(this, const Symbol('second')));
}
int get second => timestamp.second;
}
main() {
App app = new App();
new Timer.periodic(const Duration(seconds: 1), (_) {
app.timestamp = new DateTime.now();
});
query('#tmpl').model = app;
}
Также проверьте обсуждение по адресу: https://code.google.com/p/dart/issues/detail?id=12473