添加动态WebComponent div

时间:2013-06-17 17:32:24

标签: dart dart-webui

我正在尝试使用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>

1 个答案:

答案 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);

}