当使用动态HTML导入在模板中盖章时,聚合物元素会损坏尺寸
Polymer Element gets corrupted dimensions when stamped within a template with dynamic HTML Import
这是一个有点复合的情况,但在更孤立的情况下不会发生。
我已经创建了两个自定义元素:<my-element>
(聚合物),需要知道其宽度时盖章到DOM(最初它是多汁瓷砖列表)my-element.html
Polymer('my-element', ( { domReady: function (){ this.width = this.offsetWidth;
<dynamic-import>
(VanillaJS),添加HTML导入(<link>
标签到头部)时附加(原来导入模板),并没有改变元素的DOM在所有。dynamic-import.html
DynamicImportPrototype.attachedCallback = function () { // create new link tag // ... document.head.appendChild(link); };
然后我简单地将它们打包到<template>
:
index . html
...
<template bind>
<my-element>
<dynamic-import></dynamic-import>
</my-element>
</template>
完整的演示在这里
在金丝雀(原生HTML导入支持?)this.offsetWidth
是0
,但是对于样式为width: 100%
的空<div>
,它应该是container - <body>
- width。
在Chrome稳定,和IE它工作得很好,它也得到纠正后几毫秒。移除包裹<template>
固定初始宽度,以及移除document.head.appendChild
行。向头部添加节点如何以及为什么会影响元素大小?这是一个bug在聚合物,金丝雀,或在我的代码?有什么好的解决办法吗?
看起来像是Chrome浏览器的bug。聚合物GH问题,铬问题
然而,我发现了一个临时的解决方案-从附加流中删除动态导入:
DynamicImportPrototype.attachedCallback = function () {
// create new link tag
var link = document.createElement('link');
link.rel = "import";
link.href = "components/whatever.html";
// add it to the head
setTimeout( function asyncImport(){
document.head.appendChild(link);
});
};
那么在添加进口之前应该进行测量。如果采用其他方法,则需要等待导入继续呈现,这不仅难以实现,而且可能严重影响用户体验。
相关文章:
- 如何动态创建聚合物元素
- 造型:主机的聚合物元素与Javascript
- 如何在html和javascript中捕捉聚合物元素的屏幕截图
- YUIDocs 解析聚合物元素
- 仅在需要时实例化聚合物元素
- 如何从不同的元素访问聚合物元素中的属性
- 如何在渲染聚合物元素后触发事件
- 更新聚合物元素模板
- 如何使用javascript函数创建可以调用javascript函数的聚合物元素
- 聚合物元素css未显示-检查器中没有错误
- 使用jquery访问聚合物元素变量
- 聚合物元素加载非常缓慢
- 如何观察聚合物元素属性值从索引.html的变化
- 动态添加聚合物元素的就绪事件
- 如何在没有事件的自定义聚合物元素之间进行讨论
- 删除聚合物元素,文件上传在实例上传时逐渐添加更多文件
- 如何确定聚合物元素是否加载
- 按动态属性值选择聚合物元素
- 聚合物元素注册和生命周期(创建和准备调用两次)
- 如何为聚合物元素添加功能属性