我在HTML文件中有两个表行。单击第一行时,它将通过classes.add(“active_style”)更改其样式。如果第二行被单击,我想清除第一行的样式。

我知道我可以写...

querySelector(“#first_row_div”)。classes.clear();

为了清除第一行类(然后重置其样式),但是在更大的代码中,我认为可观察将是最合适的。

我不知道是否可以观察到这一点。但是,如果可以,我该怎么做?

编辑/更新:我认为正确的问题是“当变量被更改时,有什么方法可以运行函数吗?”。

谢谢您的帮助!

最佳答案

您可以为某个字段创建一个 setter/getter / setter ,并在 setter 中运行您的函数。

class MyClass {

  String _cssClass;
  String get cssClass => _cssClass;
  set cssClass(String newClass) {
    _cssClass = newClass;
    updateDom();
  }

  void updateDom() {
    // do important work here
  }
}

您可以使用扩展Observable的模型类。
在这里,您必须调用dirtyCheck()以使Observable检查更改并通知侦听器。

Dart还提供ChangeNotifier mixin。在这里,您不需要调用任何方法进行脏检查。进行更改后,将调用侦听器。

我刚才在检查功能时写的一个简单示例

import 'package:observe/observe.dart';

class Notifiable extends Object with ChangeNotifier {
  String _input = '';

  @reflectable
  get input => _input;

  @reflectable
  set input(val) {
    _input = notifyPropertyChange(#input, _input, val + " new");
  }

  Notifiable() {
    this.changes.listen((List<ChangeRecord> record) => record.forEach(print));
  }
}

class MyObservable extends Observable {
  @observable
  String counter = '';

  MyObservable() {
    this.changes.listen((List<ChangeRecord> record) => record.forEach(print));
  }
}

void main() {
  var x = new MyObservable();
  x.counter = "hallo";
  Observable.dirtyCheck();

  Notifiable notifiable = new Notifiable();
  notifiable.input = 'xxx';
  notifiable.input = 'yyy';
}

关于css - Dart语言:可观察,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24248787/

10-12 12:57
查看更多