gpt4 book ai didi

dart - 如何使用聚合物 Dart 监听列表内对象的属性更改?

转载 作者:行者123 更新时间:2023-12-04 15:12:07 24 4
gpt4 key购买 nike

我有一个对象列表(例如,人),我动态地从列表中添加和删除。当列表中任何项目的某个属性发生更改时,我想在整个列表中运行查询。

例如,我想知道列表中的任何对象是否更改了其“signedAgreement”属性。我不想手动将监听器附加到每个对象,我只想询问列表。我怎样才能做到这一点?

我的代码:

library my_element;

import 'package:polymer/polymer.dart';
import 'dart:html';
import 'models.dart';

@CustomTag("my-element")
class MyElement extends PolymerElement with ObservableMixin {
final List people = toObservable([]); // observe adds/removes to the list
final Person newPerson = new Person();

// How can I know when to re-evaluate signedCount?

int get signedCount => people.where((Person p) => p.signedAgreement).length;

void save(Event e, var detail, Node target) {
people.add(new Person.from(newPerson));
newPerson.blank();
}
}

我的模型对象看起来像:

library models;

import 'package:polymer/polymer.dart';

class Person extends Object with ObservableMixin {
@observable String name;
@observable bool signedAgreement = false;

Person();

Person.from(Person other) {
name = other.name;
signedAgreement = other.signedAgreement;
}

blank() {
name = '';
signedAgreement = false;
}
}

最佳答案

输入:ListPathObserver !

添加这个构造函数:

  MyElement() {
ListPathObserver observer = new ListPathObserver(people, 'signedAgreement');
observer.changes.listen((_) => notifyProperty(this, const Symbol('signedCount')));
}

在这里, observer当任何人在 people 中时会触发有它的 signedAgreement属性改变了。

然后,在回调中,我们通知观察者系统它应该去查看 signedCount .

关于dart - 如何使用聚合物 Dart 监听列表内对象的属性更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18994372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com