1

我正在尝试以声明方式创建自定义元素,但遇到了麻烦。我阅读 很多 文档,但由于超级新技术和不断变化的技术,它们都显得过时或不足。有谁知道如何解决这个问题?当前上下文 ( this) 没有register,我也无法更新模板。我在正确的轨道上吗?

<my-date><my-date>

  <element name="my-date">
    <template>
      <style>
        div {
          color: red;
        }
      </style>
    </template>
    <script>
      this.register({
        prototype: {
          createdCallback: function() {
            this.innerHTML = new Date();
          }
        }
      });
    </script>

http://jsbin.com/oGUKeyU/3/

4

2 回答 2

1

您尝试使用生命周期 HTMLElement API

var proto = Object.create(HTMLElement.prototype);

proto.createdCallback = function() {...};
proto.attachedCallback = function() {...};

var XFoo = document.registerElement('x-foo', {prototype: proto});

在您的情况下,它将是这样的:

var proto = Object.create(HTMLElement.prototype);

proto.createdCallback = function () {
    this.innerHTML = (new Date()).toString()
};

var xMyDate = document.registerElement('x-my-date', {
    prototype: proto
});
var newDateElement = new xMyDate();

alert(newDateElement.innerHTML);

但这仅适用于 Canary。

于 2014-01-24T17:10:29.960 回答
0

@TruMan1 是绝对正确的。由于一些复杂的时间问题,声明性元素注册在规范中<element>搁置。

可能会发生的情况是,Polymer将迭代几个不同的时序模型、生命周期方法集等,直到开发人员和浏览器供应商找到解决上面邮件列表中列出的问题的好方法。然后<element>将重新访问本地注册。

于 2014-01-25T16:30:26.957 回答