Data binding 使超类场可观测
我正在尝试使用Dart中的聚合物创建自定义“径向选择器”元素 我当前的目标是为RadialSelector类创建一个可观察的“children”字段,这样我就可以通过子类执行模板循环,并过滤那些只有特定元素类型的子类 我不清楚如何在不创建另一个在名称空间方面与“children”字段不冲突的变量的情况下使“children”字段可见。例如,我可以创建一个“childs”字段,使其可见,然后将其设置为等于this.children。但这似乎很尴尬,而且是陈词滥调 我的RadialSelector类扩展了PolymRelation类,有没有办法让它的超类“children”字段可见?目前,当我写@observable children时,Dart(可以理解)认为我只是在创建一个新的“children”变量 谢谢你,如果有什么我可以说得更清楚的,请告诉我!:) 以下是Dart代码:Data binding 使超类场可观测,data-binding,dart,dart-polymer,Data Binding,Dart,Dart Polymer,我正在尝试使用Dart中的聚合物创建自定义“径向选择器”元素 我当前的目标是为RadialSelector类创建一个可观察的“children”字段,这样我就可以通过子类执行模板循环,并过滤那些只有特定元素类型的子类 我不清楚如何在不创建另一个在名称空间方面与“children”字段不冲突的变量的情况下使“children”字段可见。例如,我可以创建一个“childs”字段,使其可见,然后将其设置为等于this.children。但这似乎很尴尬,而且是陈词滥调 我的RadialSelector类
import'包装:polymer/polymer.dart';
导入“dart:html”;
@CustomTag(“径向选择器”)
类RadialSelector扩展了聚合关系{
@已发布字符串img;
@可观察的儿童;
RadialSelector.created():super.created(){
打印(“构造径向选择器”);
印刷品(儿童);
}
filterByType(类型t,列表元素){
打印(“按调用的类型筛选”);
List newElems=新列表();
for(要素中的变量e){
if(e.runtimeType==t)
新增(e);
}
返回新元素;
}
}
以下是相应的html:
:主持人{
显示:块;
利润率:100像素
}
console.log(“嘿”);
您无法为儿童执行此操作
您可以创建一个@observable getter/setter,重定向到超级类的子类
@可观察
NodeList get children=>super.children;
设置子节点(NodeList val)=>super.children=val;//行不通
这有两个缺陷
children
列表是final
(尚未尝试,但我确定您无法分配新列表)
- 拥有一个
@可观察的子对象对您毫无帮助
只有在分配了另一个列表时才会通知您(这是不可能的,因为该字段是最终字段)
您需要的是一个可观察列表,以获得列表元素更改的通知(添加/删除/替换)。
为此,您需要用toObservable(children)
替换children
,这是不可能的,因为您无法替换children
集合
您可以使用MutationObserver
。请参阅以获得有关子节点更改的通知
您可以添加一个新字段
@observable List myChildren;
当孩子们改变时,使用突变观察者来更新这个字段
void mutationCallback(...) {
...
myChildren = children.toList();
}
这样每次您的孩子更改myChildren
get时,都会分配一个完整的新列表,并且视图会因为@observable
注释而收到有关此更改的通知。
您不需要让列表可见,因为没有要观察的单个添加/删除/替换操作