我对Polymer.dart中生命周期事件的顺序存在差异
当在Dartium中运行dart代码以及在Chrome中运行已编译的JavaScript时,事件以不同的顺序发生。
我有2个Polymer元素:Parent和Child,我在created和enteredView函数中添加了输出。
输出是: Dartium:
ChildElement created
ChildElement enteredView. Variable value: InitMsg
ParentElement created
ParentElement enteredView
铬:
ChildElement created
ParentElement created
ParentElement enteredView
ChildElement enteredView. Variable value: InitMsg
问题是:
我的代码:
parentelement.dart:
import 'package:polymer/polymer.dart';
@CustomTag('parent-element')
class ParentElement extends PolymerElement {
@observable String msg = "InitMsg";
ParentElement.created() : super.created() {
print('Parent created');
msg = "Changed msg";
}
@override
void enteredView() {
super.enteredView();
print('ParentElement enteredView');
}
}
parentelement.html
<link rel="import" href="childelement.html">
<polymer-element name="parent-element">
<template>
<div>
<span>Parent Msg: {{msg}}</span>
</div>
<child-element msg="{{msg}}"></child-element>
</template>
<script type="application/dart" src="parentelement.dart"></script>
</polymer-element>
childelement.dart:
import 'package:polymer/polymer.dart';
@CustomTag('child-element')
class ChildElement extends PolymerElement {
@published String msg;
ChildElement.created() : super.created() {
print('ChildElement created');
}
@override
void enteredView() {
super.enteredView();
print('ChildElement enteredView. Variable value: $msg');
}
}
childelement.html
<polymer-element name="child-element">
<template>
<div>
<span>Child msg: {{msg}}</span>
</div>
</template>
<script type="application/dart" src="childelement.dart"></script>
</polymer-element>
答案 0 :(得分:2)
created
构造函数不适合,如果您想要依赖它们的调用顺序。
据我所知,polymerCreated
回调应该更适合您的要求。
我不喜欢&#39;真的知道因为 enteredView
attached
满足了我的所有要求,因此我从未使用其他东西( entereView
attached
为自己的代码提供了两个不同的插槽:&#39;在super.attached()
&#39;之后&#39;在super.attached()
之后&#39;)
答案 1 :(得分:1)
我遇到了类似的问题,并在博文(http://www.roberthartung.de/animatr-gui-structure-nesting-polymer-elements/)中对其进行了描述。对我来说,诀窍是将<link rel="import">
- 语句放在中心位置,而不是自定义元素本身。我的应用程序只有一个导入我的自定义GUI元素。 GUI导入其直接自定义子元素,依此类推。
希望这会有所帮助 罗伯特