Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data binding 使超类场可观测_Data Binding_Dart_Dart Polymer - Fatal编程技术网

Data binding 使超类场可观测

Data binding 使超类场可观测,data-binding,dart,dart-polymer,Data Binding,Dart,Dart Polymer,我正在尝试使用Dart中的聚合物创建自定义“径向选择器”元素 我当前的目标是为RadialSelector类创建一个可观察的“children”字段,这样我就可以通过子类执行模板循环,并过滤那些只有特定元素类型的子类 我不清楚如何在不创建另一个在名称空间方面与“children”字段不冲突的变量的情况下使“children”字段可见。例如,我可以创建一个“childs”字段,使其可见,然后将其设置为等于this.children。但这似乎很尴尬,而且是陈词滥调 我的RadialSelector类

我正在尝试使用Dart中的聚合物创建自定义“径向选择器”元素

我当前的目标是为RadialSelector类创建一个可观察的“children”字段,这样我就可以通过子类执行模板循环,并过滤那些只有特定元素类型的子类

我不清楚如何在不创建另一个在名称空间方面与“children”字段不冲突的变量的情况下使“children”字段可见。例如,我可以创建一个“childs”字段,使其可见,然后将其设置为等于this.children。但这似乎很尴尬,而且是陈词滥调

我的RadialSelector类扩展了PolymRelation类,有没有办法让它的超类“children”字段可见?目前,当我写@observable children时,Dart(可以理解)认为我只是在创建一个新的“children”变量

谢谢你,如果有什么我可以说得更清楚的,请告诉我!:)

以下是Dart代码:

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
注释而收到有关此更改的通知。
您不需要让列表可见,因为没有要观察的单个添加/删除/替换操作