-1

(最初来自https://github.com/w3c/webcomponents/issues/392,移至此处)

我正在开发一个库(至少现在位于http://infamous.io),我正在其中创建一组自定义元素来渲染 3D 场景。该库注册了两个元素,[<motor-scene>](https://github.com/infamous/infamous/blob/master/src/motor-html/scene.js)并且<motor-node>. 对于不支持的浏览器,该库依赖于这个 document.registerElementpolyfill。

我有一个小问题。当我在 Meteor 应用程序中使用自定义元素时,一切正常<body>,但是当我尝试使用静态 HTML 页面和手动包含在<head>,它会失败并且无法按预期工作。我不确定我是否做错了什么并且对自定义元素一无所知,或者 API 是否存在问题。

要查看工作演示,只需

git clone git@github.com:trusktr/site.git
cd site
git checkout infamous-motor-html # it's on this branch.
npm install
meteor # meteor is really easy to install, meteor.com
# visit localhost:3000

结果如下所示,蓝绿色和粉红色元素在 3D 空间中按预期定位:

在职的

现在,如果您查看public文件夹,您将在html-demo.html. 您可以使用 直接在浏览器中打开它file://,或者localhost:3000/html-demo.html在运行 Meteor 应用程序时访问。我已经仔细检查过,我相信我正在做与 Meteor 版本相同的事情,但我根本无法得到预期的结果,它看起来像这样:

不工作

我不确定问题是什么,以及为什么它在 Meteor 版本中有效(Meteor 1.3 使用 Babel 编译代码)并且在静态版本中不起作用(也通过 Webpack 使用 Babel 编译)。

我在调用中添加console.logscreatedCallback, attachedCallback, etc 方法(例如)。这在控制台中显示了两种不同的输出顺序。registerElement

Meteor 版本的输出:

流星输出

静态版本的输出:

静态输出

会不会有加载顺序问题?registerElement关于何时应该调用是否有任何规则?我尝试将静态脚本放在页面末尾,这会更改输出顺序,但仍然呈现相同的内容(损坏,不像 Meteor 版本)。

有任何想法吗?自定义元素有什么我不知道的吗?为什么静态示例与 Meteor 示例看起来不一样?

注意:当使用WebReflection/document-register-element polyfill时,我在 Meteor 和 static 之间得到相同的不一致行为,而当不使用时。

4

1 回答 1

0

如果确实您的问题是正在创建的元素之间的竞争条件,那么您的元素可能会等到它所依赖的所有其他元素都被创建/附加。

然后加载顺序无关紧要,您将能够将脚本放置在任何地方。

在此处查看我的答案:升级自定义元素时如何执行脚本

于 2016-03-06T23:49:59.573 回答