3

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

1 回答 1

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

}
于 2013-06-17T18:02:28.610 回答