- Polymer 教程
- Polymer - 首页
- Polymer - 概述
- Polymer - 安装
- Polymer - 元素
- Polymer - 自定义元素
- Polymer - Shadow DOM 和样式
- Polymer - 事件
- Polymer - 数据系统
- Polymer 有用资源
- Polymer - 快速指南
- Polymer - 有用资源
- Polymer - 讨论
Polymer - 数据系统
Polymer 允许通过采取不同的操作来观察元素属性的变化,例如:
观察者 - 数据更改时调用回调函数。
计算属性 - 基于其他属性计算虚拟属性,并在输入数据更改时重新计算它们。
数据绑定 - 数据更改时,使用注释更新 DOM 节点的属性、特性或文本内容。
数据路径
路径是数据系统中的一个字符串,它提供了相对于作用域的属性或子属性。作用域可以是宿主元素。路径可以通过数据绑定链接到不同的元素。如果元素通过数据绑定连接,则数据更改可以从一个元素移动到另一个元素。
示例
<dom-module id = "my-profile"> <template> . . . <address-card address="{{myAddress}}"></address-card> </template> . . . </dom-module>
如果 <address-card> 位于 <my-profile> 元素的本地 DOM 中,则上述两个路径(my-profile 和 address-card)可以通过数据绑定连接。
以下是 Polymer.js 中特殊类型的路径段:
通配符 (*) 字符可以用作路径中的最后一个段。
可以通过将字符串拼接作为路径中的最后一个段,将数组突变显示到给定数组。
数组项路径指示数组中的一个项,数字路径段指定数组索引。
在数据路径中,每个路径段都是一个属性名称,它们包含以下两种路径:
由点分隔的路径段。例如:“apple.grapes.orange”。
在字符串数组中,每个数组元素要么是路径段,要么是点路径。例如:["apple","grapes","orange"], ["apple.grapes","orange"]。
数据流
示例
以下示例指定了数据流的双向绑定。创建一个 index.html 文件并在其中添加以下代码。
<!doctype html> <html> <head> <title>Polymer Example</title> <script src = "bower_components/webcomponentsjs/webcomponents-lite.js"></script> <link rel = "import" href = "bower_components/polymer/polymer.html"> <link rel = "import" href = "my-element.html"> </head> <body> <my-element></my-element> </body> </html>
现在创建一个名为 my-element.html 的文件并包含以下代码。
<link rel = "import" href = "bower_components/polymer/polymer-element.html"> <link rel = "import" href = "prop-element.html"> //it specifies the start of an element's local DOM <dom-module id = "my-element"> <template> <prop-element my-prop="{{demoProp}}"></prop-element> <p> Present value: <span>{{demoProp}}</span> </p> </template> <script> Polymer ({ is: "my-element", properties: { demoProp: String } }); </script> </dom-module>
接下来,创建一个名为 prop-element.html 的文件并添加以下代码。
//it specifies the start of an element's local DOM <dom-module id = "prop-element"> <template> <button on-click = "onClickFunc">Change value</button> </template> <script> Polymer ({ is: "prop-element", properties: { myProp: { type: String, notify: true, readOnly: true, value: 'This is initial value...' } }, onClickFunc: function(){ this._setMyProp('This is new value after clicking the button...'); } }); </script> </dom-module>
输出
如前几章所示运行应用程序,并导航到 http://127.0.0.1:8081/。以下是输出。
单击按钮后,它将更改值,如下面的屏幕截图所示。
链接两个路径
您可以使用 linkPaths 方法将两个路径链接到同一对象,并且需要使用数据绑定来生成元素之间的更改。
示例
linkPaths('myTeam', 'players.5');
可以使用 unlinkPaths 方法删除路径链接,如下所示:
unlinkPaths('myTeam');
观察者
发生在元素数据上的可观察更改会调用称为观察者的方法。以下是观察者的类型。
简单观察者用于观察单个属性。
复杂观察者用于观察多个属性或路径。
数据绑定
数据绑定可用于连接宿主元素在其本地 DOM 中的元素的属性或特性。可以通过向 DOM 模板添加注释来创建数据绑定,如下面的代码所示。
<dom-module id = "myhost-element"> <template> <target-element target-property = "{{myhostProperty}}"></target-element> </template> </dom-module>
本地 DOM 模板中数据绑定的结构如下所示:
property-name=annotation-or-compound-binding
或
attribute-name$=annotation-or-compound-binding
绑定的左侧指定目标属性或特性,而绑定的右侧指定绑定注释或复合绑定。绑定注释中的文本用双花括号({{ }})或双方括号([[ ]])分隔符括起来,复合绑定包括一个或多个字符串文字绑定注释。
以下是与数据绑定用例一起使用的辅助元素:
模板重复器 - 可以为数组中的每个项目创建模板内容的实例。
数组选择器 - 它为结构化数据的数组提供选择状态。
条件模板 - 如果条件为真,则可以识别内容。
自动绑定模板 - 它指定 Polymer 元素外部的数据绑定。
如果辅助元素更新 DOM 树,则 DOM 树会触发 dom-change 事件。有时,您可以通过更改模型数据与 DOM 交互,而不是通过与创建的节点交互。因此,您可以使用 dom-change 事件直接访问节点。