最新の編集:
これは web-ui の未解決の問題です: https://github.com/dart-lang/web-ui/issues/245
以前:
Web コンポーネントremoved()
のライフサイクル メソッドから呼び出される方法を見つけようとしています。以下の例で生成されたコードを見ると、 への呼び出しがあり、その後に が呼び出されることを期待していましたが、print ステートメントの出力が表示されません。autogenerated.dispatch();
replaceElement()
removed()
build.dart
おそらく関連しています:ライフサイクルメソッドの出力が何をしているのかを理解しようとして、仕様をざっと見ました。もしかして仕様が古い?から自動生成されたコードで呼び出されますが、仕様のインスタンス化セクション(この web-ui issue コメントcomposeChildren()
に記載されています) にリストされていません。composeChildren()
build.dart
この質問の背後にある理由は、HTML で Web コンポーネントを宣言する代わりに、(仕様のインスタンス化手順を介して) プログラムで単一の親 html ファイル内の Web コンポーネントをロードおよびアンロードできる Dart Web アプリケーションに関心があるためです。私は web_ui-0.2.11 で実行しています。ありがとう!
ウェブコンポーネント:
<!DOCTYPE html>
<html><body>
<element name="x-lifecycle-test" constructor="LifecycleTest" extends="div">
<template> {{foo}} </template>
<script type="application/dart">
import 'dart:html';
import 'package:web_ui/web_ui.dart';
var foo = "testing lifecycle methods";
class LifecycleTest extends WebComponent{
inserted() => print("inserted");
removed() => print("removed");
}
</script>
</element>
</body></html>
親 html ファイル:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"><title>Lifecycle</title>
<link rel="components" href="lifecycle_test.html">
</head>
<body>
<div>
<button on-click="replaceElement()">replace element</button>
</div>
<div id='holder'>
<x-lifecycle-test></x-lifecycle-test>
</div>
<script type="application/dart">
import 'dart:html';
void replaceElement() {
query('#holder').replaceWith(new DivElement()
..id = 'holder'
..text = 'replaced');
}
main() {}
</script>
<script type='text/javascript' src="https://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>
</body>
</html>