我正在尝试使用Dart动态添加一些div。 div包含一个自定义Web组件,我正在尝试传入一个变量。我希望能够指定 n 个变量,将它们传递给 n 个组件,然后将它们插入到HTML文档中。然而,正在发生的是我得到没有变量的插入div。我想知道这是否是Dart尝试将某些内容传递给已经加载的DOM并因此无所事事的情况......?这是一些代码:
product_elem.dart:
import 'package:web_ui/web_ui.dart';
import 'dart:html';
class ProductComponent extends WebComponent {
var productId;
}
product_elem.html:
<!DOCTYPE html>
<html>
<body>
<element name="product-elem" constructor="ProductComponent" extends="div">
<template>
<div style="width:335px;margin:10px;">
<h3>
{{productId}}
</h3>
</div>
</template>
<script type="application/dart" src="product_elem.dart"></script>
</element>
</body>
</html>
testcase_component.dart:
import 'dart:html';
import 'package:web_ui/web_ui.dart';
var productId;
void main() {
List myList = new List();
myList.addAll(["Foo", "Bar", "Baz"]);
for (var i = 0; i < myList.length; i++) {
productId = myList[i];
query('#products').innerHtml +=
"<div is='product-elem' id='product_elem' product-id='{{productId}}'></div>";
}
}
testcase_component.html:
<!DOCTYPE html>
<html>
<head>
<link rel="import" href="product_elem.html">
</head>
<body>
<div id="products">
<!-- Insert dynamic divs here -->
</div>
<script type="application/dart" src="testcase_component.dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>
答案 0 :(得分:1)
您无法像这样添加WebComponents。 WebUI并不知道添加了任何内容,因此您最终会得到一个正常的div。
以下是动态添加WebComponents的当前(稍微混乱)方式:
void main() {
List myList = new List();
myList.addAll(["Foo", "Bar", "Baz"]);
for (var i = 0; i < myList.length; i++) {
productId = myList[i];
var product = new ProductComponent(productId);
product.host = new DivElement();
var lifecycleCaller = new ComponentItem(product)..create();
query('#products').append(product.host);
lifecycleCaller.insert();
}
}
这样就可以调用正确的WebUI生命周期。
还要确保为ProductElem添加构造函数,以便可以在外部设置productId:
class ProductComponent extends WebComponent {
var productId;
ProductComponent(this.productId);
}