Как создать наблюдаемое производное свойство в 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' не работает, хотя было бы неплохо, если бы она работала.


person Jeff    schedule 08.09.2013    source источник


Ответы (1)


вы можете проверить пример observable_getter из репозитория dart-polymer-dart-examples github.

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

person Lesiak    schedule 09.09.2013