为什么 Polymer 不插入内容?

Why doesn't Polymer insert the content?

我想了解 Web 组件,所以我想创建一个 Web 组件,它将 "wrap" 一个 select 标记放入 select2.

这是我的主要内容 HTML:

<html>
  <head>
    <title>Web components</title>
    <meta charset="utf-8"></meta>
    <script src="bower_components/webcomponentsjs/webcomponents.min.js"></script>
    <link rel="import" href="elements/select2-select.html"></link>
  </head>
  <body>
    <div>
      <select2-select>
        <option value="A">A</option>
        <option value="B">B</option>
        <option value="C">C</option>
      </select2-select>
    </div>
  </body>
</html>

还有我的自定义元素:

<link rel="import" href="../bower_components/polymer/polymer.html"></link>

<polymer-element name="select2-select">
  <template>
    <select id="main">
      <content></content>
    </select>
  </template>
  <script>Polymer({});</script>
</polymer-element>

问题是,option 标签没有插入影子 DOM:

我做错了什么?我是 运行 Firefox on Ubuntu 14.04.2,如果它无论如何相关的话。

非常感谢。

我首先想到的是 JQuerySelect2 元素无法访问,因为您已将它们添加到全局范围。根据 The Golden Standard Expressed Dependencies 部分,Web Components 应该负责它们自己的依赖关系。

另一件要注意的事情是,一些 HTML 元素只会在其他特定元素内呈现。例如 - 如果我将 option 标签添加到 div,它们将不会呈现,除非它们被包裹在 select 标签中。

是的,最简单的解决方法是使用属性。我已经修改了您的原始脚本以使其正常工作。

主要html:

<html>
  <head>
    <title>Web components</title>
    <meta charset="utf-8"></meta>
    <script src="bower_components/webcomponentsjs/webcomponents.min.js"></script>
    <link rel="import" href="elements/select2-select.html"></link>
  </head>
  <body>
    <div>
      <select2-select options='[
      {"value":"1","text":"1"},
      {"value":"2","text":"2"},
      {"value":"3","text":"3"},
      {"value":"4","text":"4"}
      ]'></select2-select>
    </div>
  </body>
</html>

自定义元素:

<link rel="import" href="../bower_components/polymer/polymer.html">
<polymer-element name="select2-select" attributes="options">
  <template>
    <select id="main">
        <template repeat="{{option in options}}">
        <option value={{option.value}}>{{option.text}}</option>
        </template>
    </select>
  </template>
  <script>
    Polymer('select2-select', {
        publish: {
            options: {},
        }
    });
  </script>
</polymer-element>