Polymer API开发指南 (二)(翻译)
公开 property
当你公开一个 Polymer 元素的 property 名字时,就等于把这个 property 设置为公开API了。公开 property 会有如下的特性:
- 支持声明数据双向绑定
- 通过声明,property 将会按照名称一样的 html attribute 初始化数据
- property 的值可以反射到元素对应的attribute上
注: property 名称是大小写区分的,但是 attribute 却不是。polymer 将会把 property 和 attribute 一一对应,所以你不能声明两个只有大小写区别的 attribute(比如:name 和 NAME);
有两种方法可以绑定 property :
- 将property名放在
polymer-element
元素attributes
attribute里 - 将property名放在构造原型的
publish
里
举个例子,这里一个元素,通过设置attributes
来设置三个公开的property,foo
,bar
,baz
。
<polymer-element name="x-foo" attributes="foo bar baz">
<script>
Polymer('x-foo');
</script>
</polymer-element>
下面这个例子用到了publish
:
<polymer-element name="x-foo">
<script>
Polymer('x-foo', {
publish: {
foo: 'I am foo!',
bar: 5,
baz: {
value: false,
reflect: true
}
}
});
</script>
</polymer-element>
主要注意的是baz
使用了不同的声明方法来开启 attribute 反射功能。
一般来说,我们更建议使用attributes
,因为这是声明式的,而且开发者可以很容易的通过元素标签来看到所有元素暴露出来的API。
只有以下情况,我们才建议使用publish
式声明:
- 元素公开的property太多,把所有property名放在
attributes
会显得有点奇怪。 - 需要设置property的初始值。
- 你需要设置attribute到property之间的反射
property 的默认值
默认情况下,在attributes
里设置的property的值为null
。
<polymer-element name="x-foo" attributes="foo">
<script>
// x-foo 有一个名称为 foo 的 property ,默认值为 null
Polymer('x-foo');
</script>
</polymer-element>
polymer会将foo添加到元素prototype
上,并设置为null
。
你可以通过在元素的prototype
上显式property的默认值。
<polymer-element name="x-foo" attributes="bar">
<script>
Polymer('x-foo', {
// x-foo 有一个名称为 bar 的 property ,默认值为 false
bar: false
});
</script>
</polymer-element>
或者可以全部移到publish
里:
<polymer-element name="x-foo">
<script>
Polymer('x-foo', {
publish: {
bar: false
}
});
</script>
</polymer-element>
如果property的默认值为object或者array的时候,则需要放在created里初始化,这样就保证了在不同的实例里值的引用都不同。
<polymer-element name="x-default" attributes="settings">
<script>
Polymer('x-default', {
created: function() {
// create a default settings object for this instance
this.settings = {
textColor: 'blue';
};
}
});
</script>
</polymer-element>
通过设置 attribute 来配置元素
Attribute 为我们提供了一种简单的方法来直接配置元素。我们可以通过设置attribute为元素提供一个初始值,从而来自定义它。
<x-foo name="Bob"></x-foo>
如果元素的property不是字符串,那么polymer会自动判断它的类型,并将其转换为合适的格式。
除非开启了attribute反射,否则Attribute到property的连接是单向的,property改变并不会影响到attribute。
注:不要将数据绑定和attribute配置混淆。数据绑定是引用式的,这就意味着值并不会被序列化和反序列化。
探测property类型
Polymer会根据property的默认值,来判断它的类型,并将相绑定的attribute转换为此类型。
例如一个元素x-hint
有一个property名为count
,默认值为0
。
<x-hint count="7"></x-hint>
因为count
的默认值为0
,所以polymer将字符串"7"
转换成了数字7
。
如果一个property是对象或者数组,则我们可以用JSON字符串来表示它。
<x-name fullname='{ "first": "Bob", "last": "Dobbs" }'></x-name>
这就相当于在JS里设置元素的propertyfullname
。
xname.fullname = { first: 'Bob', last: 'Dobbs' };
我们可以在publish
或者created
回调中设置默认值。下面这个元素使用了三种方法。
<polymer-element name="hint-element" attributes="isReady items">
<script>
Polymer('hint-element', {
// hint that isReady is a Boolean
isReady: false,
publish: {
// hint that count is a Number
count: 0
},
created: function() {
// hint that items is an array
this.items = [];
}
});
</script>
</polymer-element>
重要:对于类型为对象或者数组的property,应该始终在created
回调中初始化。如果直接在构造原型上设置默认值的话,那么在不同的实例里就会遇到 "shared state" 错误。
Property 反射到 Attribute
Property的值可以反射到对应的Attribute上。例如,如果在一个元素上开启了对name
的反射,那么this.name="Joe"
的效果就等于 this.setAttribute('name','Joe')
,元素将会自动的更新DOM。
<x-foo name="Joe"></x-foo>
Property 反射只在某些特殊的场景有用,所以它默认是关闭的,它最常用的地方就是用attribute来控制元素的样式。
待续...
Polymer API开发指南 (二)(翻译)的更多相关文章
- 【转】Polymer API开发指南 (二)(翻译)
原文转自:http://segmentfault.com/blog/windwhinny/1190000000596258 公开 property 当你公开一个 Polymer 元素的 propert ...
- 【转】Polymer API开发指南 (一)(翻译)
原文转自:http://segmentfault.com/blog/windwhinny/1190000000592324 翻译的不好,轻拍 Polymer是google的一款前端开发框架,其基于Sh ...
- Spark Streaming和Kafka整合开发指南(二)
在本博客的<Spark Streaming和Kafka整合开发指南(一)>文章中介绍了如何使用基于Receiver的方法使用Spark Streaming从Kafka中接收数据.本文将介绍 ...
- 谷歌拼音输入法扩展API开发指南
为了帮助开发者在谷歌拼音输入法的基本输入功能基础上,开发和定义更丰富的扩展输入功能,谷歌拼音输入法提供了以Lua脚本编程语言为基础的输入法扩展API.利用输入法扩展API,开发者可以编写自定义的输入功 ...
- Web报表工具FineReport的JS API开发(二)
上次介绍FineReport的JS API中的第一类开发--FR,这次就来介绍一下FS和contentWindow类的开发. 1 FS FS是数据决策系统中的js接口,比如说FS.tabPane.ad ...
- 百度地图API开发指南
简介什么是百度地图API? 百度地图API是一套由JavaScript语言编写的应用程序接口,它能够帮助您在网站中构建功能丰富.交互性强的地图应用.百度地图API包含了构建地图基本功能的各种接口,提供 ...
- Google maps API开发(二)(转)
这一篇主要实现怎么调用Google maps API中的地址解析核心类GClientGeocoder: 主要功能包括地址解析.反向解析.本地搜索.周边搜索等, 我这里主要有两个实例: 实例一.当你搜索 ...
- CTP API 开发之二 :制作CTP java版 API
目前上期技术CTP系统提供的API版本是C++版本 SWIG是一个能将C/C++接口转换为其他语言的工具,目前可以支持Python,Java,R等语言. 本文主要介绍Windows 32/64位平台下 ...
- 来自HeroKu的HTTP API 设计指南(中文版)
原文转自:http://get.jobdeer.com/343.get 来自HeroKu的HTTP API 设计指南(中文版) 翻译 by @Easy 简介 本指南中文翻译者为 @Easy ,他是国内 ...
随机推荐
- 一步一步分析Gin框架路由源码及radix tree基数树
Gin 简介 Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much ...
- kubernetes配置后端存储 rook-ceph
一 Rook概述 1.1 Ceph简介 Ceph是一种高度可扩展的分布式存储解决方案,提供对象.文件和块存储.在每个存储节点上,将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进 ...
- tf源码中的object_detection_tutorial.ipynb文件
今天看到原来下载的tf源码的目标检测源码中test的代码不知道跑哪儿去了,这里记录一下... Imports import numpy as np import os import six.moves ...
- 【python画圆】pip安装库时出现Read timed out.解决办法
昨天第一次用python画圆,当时并没有安装numpy库(导入数据包)和matplotlib库(导入图形包),于是尝试用pip安装库 首先,我先更新了pip,如下图: 顺便附上成功截图: 然后安装nu ...
- RENIX软件连接机箱测试RTSM基本操作——网络测试仪实操
本文主要介绍了RENIX软件RTSM功能连接机箱测试的基本操作.文章分为三部分内容,第一部分为RTSM功能简介,第二部分为RTSM原理简介,第三部分为RTSM测试方案的具体介绍. 第一部分.RTSM功 ...
- 【面经】Java面试突击
基础语法 基本数据结构 Java 的基本数据类型有 8 种,包括 6 种数字类型.1 种字符类型和 1 种布尔类型. 基本数据类型总览 数字类型包括 4 种整数类型和 2 种浮点数类型,4 种整数类型 ...
- mysql使用group by分组时出现错误ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and
问题: 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ...
- OSPF协议原理及配置3-邻居关系的建立
OSPF协议原理及配置3-邻居关系的建立 OSPF协议的邻居关系是通过交换Hello报文建立的,所以我们先对OSPF的报文的种类,及Hello报文的结构做一了解. 1 OSPF协议有5种协议报文( ...
- LGP6011题解
昨天考试考到了这道题,那就来补一下题解吧. 题意简单不再阐述. 首先删除之后还要向左移动,很容易想到 ODT 平衡树,这个过于一眼,不再阐述. 重点说第二种方法. 向左平移的这个操作,我们是否可以用别 ...
- 《shader入门精要》13.2再谈运动模糊中片元着色器的世界坐标的计算
具体在书p275页 这里为啥需要除D.w呢. 首先我们得到的NDC的坐标是已经归一化的,但是CurrenViewProjectionMatrix的作用,是把世界空间转化为尚未归一化的裁剪空间. 这里看 ...