Dart 省道聚合:如何在创建时在自定义中设置非字符串字段
我正在写一个聚合物应用程序。我将聚合物元素扩展如下:Dart 省道聚合:如何在创建时在自定义中设置非字符串字段,dart,dart-polymer,Dart,Dart Polymer,我正在写一个聚合物应用程序。我将聚合物元素扩展如下: @CustomTag(“自定义元素”) 类CustomElement扩展了聚合关系{ @公布名单年份; CustomElement.created():super.created(); } 相应的html: 列出的年份是 {{year} 在条目html文件中引用的dart脚本中,从服务器获取一些数据后,我会动态创建以下元素: initPolymer()。运行(){ querySelect(“#自定义元素”).children.add(
@CustomTag(“自定义元素”)
类CustomElement扩展了聚合关系{
@公布名单年份;
CustomElement.created():super.created();
}
相应的html:
列出的年份是
{{year}
在条目html文件中引用的dart脚本中,从服务器获取一些数据后,我会动态创建以下元素:
initPolymer()。运行(){
querySelect(“#自定义元素”).children.add(
新元素.tag(“自定义元素”)
…id=“我的自定义元素”
);
});
如果CustomElement
中的years
设置为某个值,那么给定的代码工作正常,现在我想在主脚本中设置它。如果属性years
是String
类型,那么我只需将最后一块更改为
initPolymer()。运行(){
querySelect(“#自定义元素”).children.add(
新元素.tag(“自定义元素”)
…id=“我的自定义元素”
..setAttribute(“年”、“2010年”)
);
});
但问题是我需要设置一个完整的列表
,而不是一个值。我想不出一个办法。我该怎么办?欢迎提出解决方案和建议
编辑:
因此,我的主要脚本如下所示
void main(){
//实际上,此列表是从服务器获取的
列出客户年数=[‘2010’、‘2011’];
initPolymer()运行(){
querySelect(“#自定义元素”).children.add(
新元素.tag(“自定义元素”)
…id=“我的自定义元素”
//这里我想设定一个公共领域*年*
//自定义元素的定义
//以下方法不起作用
// 1.
//..setAttribute('年',自定义年)
//异常:未捕获错误:“列表”类型不是“值”的“字符串”类型的子类型。
// 2.
//..setAttribute('years',toobserval(customYears))
//异常:未捕获错误:“ObservableList”类型不是“value”类型“String”的子类型。
// 3.
//…年=年
//..年=可观测(自定义年)
//NoSuchMethodError:找不到方法:“years=”
);
});
}
所以问题是,如何在类本身之外为CustomElement实例的非字符串成员字段赋值?类内的直接赋值不会导致任何问题,但这不是我想要的。我希望我现在能更清楚地解释自己。试着简单地为字段赋值:
导入“包:观察/观察.dart”;
initPolymer()运行(){
querySelect(“#自定义元素”).children.add(
新元素.tag(“自定义元素”)
…id=“我的自定义元素”
..年=可观测([“2010”])
);
});
通常在主要聚合物元素中使用自定义元素,并且年份等属性与其范围有关:
@CustomTag(“主元素”)
类main元素扩展了聚合关系{
@发布的列表年份=toObservable([“2010”]);
mainlelement.created():super.created();
}
基本上@Ozan回答了您的实际问题,但还有一个问题。
代码赋值时,元素尚未完全初始化。这就是Dart失败的原因,它告诉您HtmleElement没有设置器。添加Polymer.onReady.then()后,
Polymer完全初始化,分配工作正常
提示:如果将创建的元素强制转换为其具体类型,则在DartEditor中不会收到警告
import'包装:polymer/polymer.dart';
导入“dart:html”;
//添加了导入以便能够使用该类型
导入“custom_element.dart”;
void main(){
//实际上,此列表是从服务器获取的
列出客户年数=[‘2010’、‘2011’];
//聚合物=>0.16.0
initPolymer().然后((区域)=>zone.run(){
Polymer.onReady.then((){//added-等待onReady
查询选择器(“自定义元素”).children.add(
(new-Element.tag('custom-Element')作为CustomElement)
…id=“我的自定义元素”
..年=可观测(自定义年));
});
}));
}
向自定义元素添加构造函数更方便,如
import'包装:polymer/polymer.dart';
导入“dart:html”;
@CustomTag('custom-element')
类CustomElement扩展了聚合关系{
工厂自定义元素(){
final x=新元素.tag('custom-Element');
返回x;
}
CustomElement.created():super.created();
@公布名单年份;
}
然后您可以创建如下元素
querySelector(#自定义元素”).children.add(
新附录()
…id=“我的自定义元素”
..年=可观测(自定义年));
另见