核心要点
::shadow
和 /deep/
选择器来设置 Shadow DOM 中元素的样式。在最近结束的 Google I/O 2015 大会上,Google 发布了期待已久的 Polymer 1.0 版本,并宣布其已准备好投入生产。对于那些在 Polymer 库仍处于开发者预览阶段时就一直在使用它的用户,本文将作为将现有应用程序迁移到最新版本的 Polymer 的指南。
关于 1.0 版的一些重要说明:
安装最新版本的 Polymer 的步骤与本文中描述的完全相同。要更新现有的 Polymer 安装,请导航到应用程序目录,并在终端中运行以下命令:
$ bower update
务必注意,这肯定会破坏您现有的应用程序,因为如前所述,这两个版本不兼容。因此,建议改为在单独的文件夹中安装新副本。为了说明自 0.5 版以来的变化,我们将使用我之前在 SitePoint 上的一篇文章中的信用卡自定义元素作为参考,以比较这两个版本之间的差异。
为不支持的浏览器提供 polyfill
新版本的 Polymer 不再需要 webcomponents.js
库中包含的 Shadow DOM polyfill。改为使用更小的 webcomponents-lite.js
库为旧版浏览器提供 polyfill。
版本 0.5:
<🎜>
版本 1.0:
<🎜>
“精简版”比其前身大约减少了 80kb 的大小,当性能是关键因素时,这可能非常重要。
定义自定义元素
<polymer-element>
标签已被包含自定义元素定义的 <dom-module>
标签取代。自定义元素现在由 <dom-module>
标签的 id
属性标识。自定义元素的命名规则仍然相同。
版本 0.5:
$ bower update
版本 1.0:
<🎜>
注册自定义元素
以前,我们可以通过简单地调用 Polymer()
构造函数来注册自定义元素。如果标签位于 <polymer-element>
标签内,则指定自定义元素名称是可选的。在此版本中,自定义元素现在通过使用原型上的 is
属性来注册。
版本 0.5:
<🎜>
版本 1.0:
<polymer-element name="credit-card"></polymer-element> ...
is
属性的值必须与自定义元素的 <dom-module>
标签的 id
属性匹配,并且与之前的版本不同,这不是可选的。
标签可以在 <dom-module>
元素内部或外部,但必须在调用 Polymer
构造函数之前解析元素的模板。
自定义元素属性
<polymer-element>
标签中包含的任何属性现在都应与数据类型一起在 properties
对象上声明。
版本 0.5:
<dom-module id="credit-card"></dom-module> ...
版本 1.0:
Polymer('credit-card', {});
自定义元素样式
元素样式现在定义在 <template>
标签之外。
版本 0.5:
Polymer({ is: 'credit-card' });
版本 1.0:
<polymer-element name='credit-card' attributes='amount'></polymer-element>
使用 HTML 导入支持外部样式表。
数据绑定
Polymer 1.0 提供两种类型的数据绑定:
[[ ]]
创建单向绑定。数据流是自上而下的,从宿主到子元素,绑定永远不会修改宿主属性。{{ }}
创建自动绑定。数据流是单向的或双向的,具体取决于目标属性是否配置为双向绑定。在此版本中,绑定必须替换节点的整个文本内容或属性的整个值。因此不支持字符串连接。对于属性值,建议使用计算绑定而不是字符串连接。
版本 0.5:
Polymer({ is: 'credit-card', properties: { amount: { type: Number } } });
版本 1.0:
<polymer-element name="credit-card" attributes="amount"></polymer-element> <template> ... </template>
<dom-module id="credit-card"> <style> ... </style> <template> ... </template> </dom-module>
请注意,这意味着节点不能在绑定注释周围包含任何空格。
新的 Shady DOM
Polymer 0.5 使用 Shadow DOM 为开发人员提供更简单的元素接口,并通过隐藏影子根后面的子树来抽象所有复杂性。这构成了封装的基础,在支持 Shadow DOM 的浏览器中效果很好。
对于尚不支持 Shadow DOM 的浏览器,实现与原生 Shadow DOM 完全相同的 polyfill 非常困难,通常比原生实现慢,并且需要大量代码。由于这些原因,Polymer 团队决定取消 Shadow DOM polyfill,而是构建了一个更轻量级的本地 DOM 版本,它提供了类似于 Shadow DOM 的封装。
需要注意的是,Shady DOM 和 Shadow DOM 彼此兼容,这意味着 Shady DOM API 在浏览器可用时使用原生 Shadow DOM,并在不支持的浏览器中回退到 Shady DOM。
结论
根据应用程序的复杂性,将您的应用程序升级到 Polymer 1.0 可能会是一个非常缓慢的过程,但在加快加载时间和显着减小有效负载方面具有巨大的优势。 Polymer 项目网站上提供的官方迁移指南更深入地介绍了内部 API 的其他一些更改,因此请务必查看。
此外,Chuck Horton 创建了一个名为 Road to Polymer 1.0 的 Github 存储库,其中提供了一个代码转换工具,可以将您的代码从 0.5 版更新到 1.0 版。如果您不想手动进行一些外观更改,这可以作为迁移的起点。
关于升级到 Polymer 1.0 的常见问题
Polymer 1.0 是对先前版本 Polymer 0.5 的完全重写。新版本更高效,占用空间更小,性能更快。它还引入了一种新的、简化的语法,更容易理解和使用。数据绑定系统已进行了改进,以提高性能并使其行为更直观。此外,Polymer 1.0 对创建自定义元素的支持更好,自定义元素是 Web Components 标准的关键部分。
从 Polymer 0.5 升级到 Polymer 1.0 包括几个步骤。首先,您需要更新 Bower 依赖项以指向新的 Polymer 1.0 元素。然后,您需要更新 HTML 导入以加载新的元素。您还需要更新元素定义和数据绑定以使用新的 Polymer 1.0 语法。最后,您需要彻底测试您的项目以确保一切按预期工作。
Shadow DOM 是 Web Components 标准的关键部分。它提供了一种封装自定义元素实现细节的方法,将其内部结构和样式隐藏在页面的其余部分之外。在 Polymer 1.0 中,您可以使用 Shadow DOM 创建完全封装且可重用的自定义元素。
设置 Shadow DOM 中元素的样式可能有点棘手,因为它们是封装的,与页面的其余部分隔离。但是,Polymer 1.0 提供了几种设置 Shadow DOM 元素样式的方法。您可以使用 CSS 自定义属性来定义可以在 Shadow DOM 内部应用的样式。您还可以使用 ::shadow
和 /deep/
选择器来穿透 Shadow DOM 并设置其内部元素的样式。
...(其余的FAQ答案可以按照同样的方式改写,保持内容一致,但用词和句式有所变化)
以上是升级到聚合物1.0的指南的详细内容。更多信息请关注PHP中文网其他相关文章!