原文链接: Step 1: Creating the app structure
翻译日期: 2014年7月5日
翻译人员: 铁锚

在本节中,将使用一些预先构建好的Polymer元素来创建基本的应用程序结构,包括一个工具栏(toolbar)和一些选项卡(tabs).

编辑 index.html 文件
进入根目录下面的 starter 目录中, 使用你喜欢的文本编辑器打开 index.html 文件, 文件的初始内容大致如下所示:

<!doctype html>
<html>

<head>
  <title>unquote</title>
  <meta name="viewport"
    content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
  <script src="../components/platform/platform.js">
  </script>

  <link rel="import"
    href="../components/font-roboto/roboto.html">
  ...

说明:

  • 本文件定义了一些基本的风格(styles)并嵌入了 platform.js 脚本文件,该脚本可以提供所有缺少的平台特性。
  • 元素 link rel="import" 是HTML中一种新的引入一个 html 文件作为资源的方式,称为 HTML Import.

略过中间的那些样式新鲜(style),在文件的底部,你会看到一些新鲜的东西:

  ...
<body unresolved touch-action="auto">

</body>
  ...

说明:

  • <body>元素的 unresolved 属性(attribute), 是为了防止 那些在浏览器中没有原生(native)支持的自定义的无样式元素(FOUC)发生闪烁(flash)而设计的。详情请参考 Polymer样式参考文档
  • touch-action="auto" 属性是为了确保在某些浏览器中妥善处理触摸事件。

-------------------------------------------------------------------------------------

接下来我们要在合适的位置添加一些 HTML import link 来引入  <core-header-panel>, <core-toolbar>, 以及 <paper-tabs> 元素:

  <script     src="../components/platform/platform.js">
  <link rel="import"     href="../components/font-roboto/roboto.html">
  <!-- 下面是需要添加的元素,如果乱码,请删除中文内容,或另存为UTF-8编码 -->
  <link rel="import"    href="../components/core-header-panel/core-header-panel.html">
  <link rel="import"    href="../components/core-toolbar/core-toolbar.html">
  <link rel="import"    href="../components/paper-tabs/paper-tabs.html">

说明

  • Polymer 使用 HTML imports技术 来加载组件。HTML imports提供了依赖管理,确保自定义元素及其所有的依赖项都在使用之前被加载进来。
  • 在原教程中,需要添加的代码使用黑色文字显示(因为 CSDN的 pre 限制,所以译文中请读者自己甄别)。

-------------------------------------------------------------------------------------

要增加一个工具条(toolbar), 可以在 body 标签内添加下面的代码:

  <core-header-panel>
    <core-toolbar>
    </core-toolbar>
    <!-- 主要的页面内容将会放在这里 --> 

  </core-header-panel>

保存后/部署后刷新页面,将看到顶部一个蓝色的工具栏.
说明:

  • <core-header-panel> 元素是一个简单的容器,包含一个header(在本例中是<core-toolbar> 元素) 和一些内容。默认情况下, header 保持在屏幕的顶部,但也可以设置为随内容滚动。
  • <core-toolbar> 元素作为容器,可以存放 选项卡(tab)的,菜单按钮以及其他控件。

-------------------------------------------------------------------------------------

添加选项卡(tab)
本应用将使用选项卡(tab,有时也称为标签)在两个不同的界面(view,标签页,视图)中切换, 包括一个消息列表(messages ), 以及一个收藏/关注列表(favorites). <paper-tabs> 元素的实现方式类似于 <select> 元素, 但显示出来是一些选项卡的集合.

  <core-header-panel>
    <core-toolbar>
	<!-- 添加一些选项卡,以paper-开头的是Material design风格的标签,具有很炫酷的效果 -->
	<paper-tabs valueattr="name" selected="all" self-end>
        <paper-tab name="all">所有</paper-tab>
        <paper-tab name="favorites">收藏</paper-tab>
      </paper-tabs>
    </core-toolbar>
    <!-- 主要的页面内容将会放在这里 --> 

  </core-header-panel>

保存/部署后刷新页面,将看到顶部工具栏以及两个选项卡,切换了试试?
说明:

  • 默认情况下, <paper-tabs> 通过索引(index)值来标识选中了哪一个子元素。valueattr="name" 指定它应该根据子元素的 name 属性来确定选中哪一个。
  • selected="all" 选择第一个选项卡(tab)作为初始的选项卡(因为第一个的 name="all")。
  • 在这里,子元素是 <paper-tab> 元素, 当你触摸时,这些元素改变样式,并显示“墨涟漪(ink ripple)”动画效果。

-------------------------------------------------------------------------------------

在文件的末尾(body里面)添加一个 <script> 标签来处理 tab 切换事件:

  <script>
    // 获取选项卡DOM元素 paper-tabs
    var tabs = document.querySelector('paper-tabs');
    // 添加事件监听, 很明显,你需要chrome浏览器来运行
    // 这里每次切换会触发2次,前一个tab取消选中,以及新tab被选中
    tabs.addEventListener('core-select', function(e) {
      //
      var detail = e["detail"] || {};
      var item = detail["item"] || {};
      var isSelected = detail["isSelected"];
      console.log(
        "Tab(\""+ item["innerText"] + "\") changeTo: "+ isSelected +"; [" + tabs.selected + "] isSelected "
        );
    });
  </script>

说明

  • <paper-tab> 元素在您选择一个tab时会触发 core-select 事件。你可以像一个内置元素一样可以和他交互。
  • 现在没有什么可切换的,稍后的小节您将完成这一点。

保存(建议编辑过程中随时保存,这是好的编码习惯)文件,部署,然后用chrome打开访问链接, 比如
http://localhost:8080/polymer-tutorial-master/starter/index.html

图 第一个Polymer app运行效果.

如果发生了什么错误,可以和 step-1 目录下的 index.html 文件进行对比,当然,你也可以直接访问那个文件试试。

在本节中,通过 HTML imports 来引入一些自定义的元素,并使用它们来创建了一个简单的 app 布局.
思考:  在 <paper-tabs> 中可以使用其他子元素吗,试试 <img> 或者 <span> 吧?

下一节
Step2: 第一个Polymer应用 - (2)创建你自己的元素

第一个Polymer应用 - (1)创建APP结构的更多相关文章

  1. 第一个Polymer应用 - (2)创建你自己的元素

    原文链接: Step 2: Your own element翻译日期: 2014年7月6日翻译人员: 铁锚通过上一节的学习和实践, 您已经完成了一个基本的应用程序结构(application stru ...

  2. 第一个Polymer应用 - (0)准备工作

    原文链接:  Getting Started - Your first Polymer application翻译时间: 2014年7月5日翻译人员: 铁锚 关于Polymer 的简介,请参考 CSD ...

  3. Django(博客系统):基于pycharm如何一个django工程下创建多个app

    背景:通常我们创建一个django系统时,为了把业务模块划分清楚往往会把一个独立的业务模块放到一个app中,如果多个独立的业务模块就会创建多个app,一般情况下为了更好的管理这些app,会把他们都存放 ...

  4. Django 创建 APP和目录结构介绍

    一.通过pip安装Django 以windows 系统中使用pip命令安装为例 win+r,调出cmd,运行命令:pip install django自动安装PyPi 提供的最新版本.指定版本,可使用 ...

  5. [Xcode 实际操作]九、实用进阶-(28)在iTunes Connect(苹果商店的管理后台)中创建一个新的新的APP

    目录:[Swift]Xcode实际操作 本文将演示如何在iTunes Connect(苹果商店的管理后台)中创建一个新的新的APP. 首先要做的是打开浏览器,并进入[iTunesConnect网站], ...

  6. React Native APP结构探索

    APP结构探索 我在Github上找到了一个有登陆界面,能从网上获取新闻信息的开源APP,想来研究一下APP的结构. 附上原网址:我的第一个React Native App 具体来讲,就是研究一个复杂 ...

  7. 【如何快速的开发一个完整的iOS直播app】(原理篇)

    原文转自:袁峥Seemygo    感谢分享.自我学习 目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的 ...

  8. pycharm上运行django服务器端、以及创建app方法

     快来加入群[python爬虫交流群](群号570070796),发现精彩内容. 安装Django  下载Django包,解压缩. CMD 进入解压路径下. 执行:python setup.py in ...

  9. 如何快速的开发一个完整的iOS直播app(原理篇)

    目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的iOS直播app](采集篇) 前言 大半年没写博客了,但 ...

随机推荐

  1. Hazelcast源码剖析之Eviction

    v:* { } o:* { } w:* { } .shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-botto ...

  2. C语言诠释--为什么内存是线性分布的。

    Author:伟易达集团软件工程师 II 杨源鑫Date :2016.11.11Subject:内存为什么是线性分布的 今天有位小伙伴问了我一个问题,问题大概是这样描述的:      师兄,我如何能够 ...

  3. 全文检索Lucene (2)

    接着全文检索Lucene (1) . 下面我们来深入的研究一下,如何使用Lucene! 从全文检索Lucene (1)中我们可以看出,Lucene就好比一个双向的工作流,一方面是对索引库的维护,另一方 ...

  4. MySQL输入密码后闪退,这里有解

    不知道怎么的,我的MySQL就像抽风了一样,可能是不想理我了吧.只要我输入密码,它就会闪退.而且使用其他的数据库管理工具也是链接不成功的.于是下决心,调教调教它,于是有了下面的这些解决方案. 解决方法 ...

  5. ROS_Kinetic_23 ROS流行版本和相关书籍汇总

    目前,ROS使用的主流版本主要是下面四种:Hydro,Indigo,Jade,Kinetic. Distro Release date Poster Tuturtle, turtle in tutor ...

  6. RecyclerView下拉刷新上拉加载(三)—对Adapter的封装

    RecyclerView下拉刷新上拉加载(一) http://blog.csdn.net/baiyuliang2013/article/details/51506036 RecyclerView下拉刷 ...

  7. MySQL聚簇索引的使用介绍

    MySQL聚簇索引保证关键字的值相近的元组存储的物理位置也相同(所以字符串类型不宜建立聚簇索引,特别是随机字符串,会使得系统进行大量的移动操作),且一个表只能有一个聚簇索引.因为由存储引擎实现索引,所 ...

  8. 精通CSS+DIV网页样式与布局--图片效果

    提到图片效果,小伙伴们可能会想到美图秀秀,ps等,这些软件都是款非常不错的照片处理软件,包括常用的:黑白,增强,高斯,高对比,夜视,老照片和铅笔画等等.不管你是否是专业的 照片拍摄人员,我们都可以通过 ...

  9. [Linux]vbox 虚拟机添加新磁盘

    情况是这样的,开始创建虚拟机的时候硬盘设置太小了,只有10g,我现在通过vbox的设置给这个linux(centos6.6)虚拟机添加了一块硬盘. 下面的操作就是怎么把硬盘挂载到系统中. 通过 fdi ...

  10. 【一天一道LeetCode】#111. Minimum Depth of Binary Tree

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...