polymer入门例子-已过时

这个教程挺不错!:http://blog.csdn.net/renfufei/article/details/37040883 过时了,现在的版本已经为1.0了

一:创建APP结构

本教程会使用预先构建好的polymer元素:toolbar,tabs,panel

<meta name="viewport"  content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
//提供缺少的平台特性
//<script src="../components/platform/platform.js">//该引入的是这个,而不是platform.js<script src="../components/webcomponentsjs/webcomponents.js"></script>
//引入html文件
<link rel="import" href="../components/font-roboto/roboto.html">
//unresolved为了防止,浏览器中没有原生支持的无样式元素,而发生的闪烁。
<body unresolved touch-action="auto">
	<core-header-panel>
		<core-toolbar>
			//valueattr="name"指会根据子元素的name属性来确定选择哪一个;selected="all"指选择name为all的作为初始的选项卡;self-end什么意思?
			<paper-tabs id="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>
	<script>
	    var tabs = document.querySelector(‘paper-tabs‘);
	    // 添加事件监听, 很明显,你需要chrome浏览器来运行
	    // 这里每次切换会触发2次,前一个tab取消选中,以及新tab被选中
	    tabs.addEventListener(‘core-select‘, function(e) {
	      //e = {detail:object}
	      var detail = e["detail"] || {};        //e.detail = {isSelected:false; item:paper-tab}
	      var item = detail["item"] || {};
	      var isSelected = detail["isSelected"];        //item = paper-tab.innerText, tabs.selected = paper-tabs的selected属性的值
	      console.log(
	        "Tab(\""+ item["innerText"] + "\") changeTo: "+ isSelected +"; [" + tabs.selected + "] isSelected "
	        );
	    });
    </script>
</body>

二:自定义元素:<script>写在template外面

调用自定义元素

<post-card>
	<img src="">
	<h2>孙飞鹏</h2>
	<h3>you are the best</h3>
</post-card>

影子DOM:局部的DOM树添加到某个DOM元素中,局部的DOM样式跟全局的web独立

<link rel="import" href="../components/polymer/polymer.html">
<link rel="import" href="../components/core-icon-button/core-icon-button.html">
//<polymer-element>自定义新元素的方式,创建的元素叫post-card
<polymer-element name="post-card"> //<polymer-element>直接子元素中只能有一个<template>,但是<template>可以嵌套<template>,创建的元素不会出现在宿主元素的children中
  <template>
    <style>    //:host指<post-card>
    :host {
      display: block;
      position: relative;
      background-color: white;
      padding: 20px;
      width: 100%;
      font-size: 1.2rem;
      font-weight: 300;
    }
    .card-header {
      margin-bottom: 10px;
    }
    polyfill-next-selector { content: ‘.card-header h2‘; }   //::content h2指通过插入点<content>派发的h2,不能对插入点设置自身样式,所以::content伴随后代选择器
    .card-header ::content h2 {
      margin: 0;
      font-size: 1.8rem;
      font-weight: 300;
    }
    polyfill-next-selector { content: ‘.card-header img‘; }
    .card-header ::content img {
      width: 70px;
      border-radius: 50%;
      margin: 10px;
    }
    core-icon-button {
      position: absolute;
      top: 3px;
      right: 3px;
      color: #636363;
    }
    :host([favorite]) core-icon-button {
      color: #da4336;
    }
    </style>
  //添加div和content,layout horizontal center创建flexbox的方式,<img>会访入第一个content
    <div class="card-header" layout horizontal center>
      <content select="img"></content>
      <content select="h2"></content>
    </div>

    <core-icon-button
      id="favicon"
      icon="favorite"
      on-tap="{{favoriteTapped}}">
    </core-icon-button>

    <content></content>
  </template>
  <script>
  Polymer({
    publish: {
      favorite: {
        value: false,
        reflect: true
      }
    },
    favoriteTapped: function(event, detail, sender) {
      this.favorite = !this.favorite;
      this.fire(‘favorite-tap‘);
    }
  });
  </script>
</polymer-element>

三:数据获取和绑定

post-list

<link rel="import" href="../components/polymer/polymer.html">
<link rel="import" href="../post-service/post-service.html">
<link rel="import" href="post-card.html">
//创建一个名为show的发布属性
<polymer-element name="post-list" attributes="show">
  <template>
    <style>
    :host {
      display: block;
      width: 100%;
    }
    post-card {
      margin-bottom: 30px;
    }
    </style>
  //posts="{{posts}}"在<post-service>和自定义元素间加了数据绑定:<post-service>有一个属性posts,也就是这里的{{posts}}  //id可以随便写
    <post-service id="service" posts="{{posts}}"></post-service>

    <div layout vertical center>
      <template repeat="{{post in posts}}">
        <post-card
          favorite="{{post.favorite}}"
          on-favorite-tap="{{handleFavorite}}"
          hidden?="{{show == ‘favorites‘ && !post.favorite}}">
          <img src="{{post.avatar}}" width="70" height="70">
          <h2>{{post.username}}</h2>
          <p>{{post.text}}</p>
        </post-card>
      </template>
    </div>
  </template>

  <script>
  Polymer({
    handleFavorite: function(event, detail, sender) {
      var post = sender.templateInstance.model.post;
      this.$.service.setFavorite(post.uid, post.favorite);
    }
  });
  </script>
</polymer-element>

其实也挺简单的,通过<post-service>连接前端和后端。

前端引入预设和自定义的元素,后端通过ajax来获取数据。中间通过发布属性来连接。

教程:http://blog.csdn.net/renfufei/article/details/38349971  很不错 介绍了四个布局元素

把browser调整为移动设备

<cored-header-panel>

header部分:<core-toolbar>或者div.core-header。有很多种模式。需要指定高度
content部分:

<core-toolbar>

工具栏,容器。通过.medium .tall改变高度

<core-drawer-panel>

通过togglePanel方法来切换状态
nav部分:left, right。drawer属性
content部分:main属性

<core-scaffold>

可以包含以上三个元素

把这个教程重新做一遍:http://blog.csdn.net/renfufei/article/details/37040883

创建APP结构做好

开始做自定义元素:script写在template外面

获取,绑定数据:

link html元素是使用href;
post-service--post-list--post-card--index;
post-list.html <polymer-element>有一个发布属性attributes="show",在index.html中使用show="all"
post-list.html <post-service>有一个属性publish="{{itmes}}":publish来自于post-service.html的<polymer-element attributes="publish">,在post-service.html的方法中,可以使用this.publish来接受返回的响应;itmes用在post-list.html中,来表示返回对象的数组。

收尾工作:

黑色变为红色,是通过color属性

很特殊的问题

<paper-tabs selected="all"></paper-tabs>
var tabs = document.querySelector("paper-tabs");
tabs.selected为all。

不能用jquery获取:$("paper-tabs"),获取后,取不到selected的值。
只能通过document.querySelector();
添加事件的方法:tabs.addEventListener(‘core-select‘, function(e){});

post-card

 <div class="card-header" layout horizontal center>
  <content select="img"></content>
  <content select="h2"></content>
</div>

<core-icon-button
  id="favicon" //选择心形图标
  icon="favorite"  //tap(触摸)时,调用favoriteTapped方法
  on-tap="{{favoriteTapped}}">
</core-icon-button>

<content></content>
  <script>
  Polymer({  //发布属性的一种方式
    publish: {
      favorite: {
        value: false,     //属性值发生变化时 favorite 属性会被更新
        reflect: true
      }
    },
    favoriteTapped: function(event, detail, sender) {
      this.favorite = !this.favorite;    //每个自定义元素原型的工具方法之一,触发自定义事件
      this.fire(‘favorite-tap‘);
    }
  });
  </script>

post-list

//favorite-tap 事件 的 事件处理程序 是 handleFavorite, hidden?="{{}}"如果绑定的表达式计算值为true则设置该属性<post-card favorite="{{post.favorite}}" on-favorite-tap="{{handleFavorite}}" hidden?="{{show==‘favorites‘ && !post.favorite}}">
	<img src="{{post.avatar}}" width="70" height="70">
	<h2>{{post.username}}</h2>
	<h2>{{post.text}}</h2>
</post-card>
Polymer({
  handleFavorite: function(event, detail, sender) {   //post-list接受post-service传过来的值,是这样获取的。
    var post = sender.templateInstance.model.post;
    this.$.service.setFavorite(post.uid, post.favorite);
  }
});
时间: 2024-10-18 01:42:49

polymer入门例子-已过时的相关文章

HTML入门例子

HTML入门例子示例 <1>打开记事本:点击"开始"--选择"程序"--选择"附件"--选择"记事本" <2>输入下面代码(直接拷贝过去就可以啦) <!DOCTYPE html>   <html>        <head>           <title>欢迎来到我的博客</title>       </head> <bo

一个简单的iBatis入门例子

一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. 2.创建类Person.java package com.ibeats;import java.util.Date; public class Person { private int id; private String firstName; private String lastName; private double weightInKilograms; private do

Java TM 已被阻止,因为它已过时需要更新的解决方法

公司的堡垒机需要通过浏览器登陆,且该堡垒机的网站需要Java的支持,最近通过浏览器登陆之后总是提示"java TM 已被阻止,因为它已过时需要更新的解决方法"导致登陆之后不能操作, 但是操作系统中确实已经安装了比较新的JDK,安装的JDK版本是jdk-7u67-windows-i586,因为太烦人,所以决定搞清楚报错的原因,一劳永逸,彻底解决这个问题 准备工作:安装JDK,安装版本jdk-7u67-windows-i586.exe,因为机器的Eclipse还依赖64位的JDK,所以另安

【Bootstrap Demo】入门例子创建

本文简单介绍下如何来使用 Bootstrap,通过引入 Bootstrap,来实现一个最基本的入门例子. 在前一篇博文[Bootstrap]1.初识Bootstrap 基础之上,我们完全可以更加方便快捷的创建一个的简单例子.这个例子只有基本的东西:引入了预编译版的 CSS 和 JavaScript 文件,页面只包含了一个 container 元素. 在Bootstrap的官方网站的下载页面 http://getbootstrap.com/getting-started/#download ,也有

MINA经典入门例子----Time Server

原文地址 http://blog.sina.com.cn/s/blog_720bdf0501010b8r.html 貌似java的IO.NIO的入门例子都有相关的Time Server Demo.本例为MINA官方Demo翻译过来而已. MINA百科: Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MI

JPA入门例子

(1).JPA介绍: JPA全称为Java PersistenceAPI ,Java耐久化API是Sun公司在Java EE 5标准中提出的Java耐久化接口.JPA吸取了当前Java耐久化技能的长处,旨在标准.简化Java目标的耐久化作业.运用JPA耐久化目标,并不是依赖于某一个ORM结构.      为何要运用JAP?      在说为何要运用JPA之前,咱们有必要了解为何要运用ORM技能. ORM 是Object-Relation-Mapping,即目标联系暗射技能,是目标耐久化的中心.O

freemarker入门例子

freemarker入门例子,直接代码如下: FreeMarkerTest import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; impor

spring mvc构建WEB应用程序入门例子

在使用spring mvc 构建web应用程序之前,需要了解spring mvc 的请求过程是怎样的,然后记录下如何搭建一个超简单的spring mvc例子. 1) spring mvc的请求经历 请求由DispatcherServlet分配给控制器(根据处理器映射),在控制器完成处理后,请求会被发送到一个视图(根据viewController解析逻辑视图) 来呈现输出结果. 整理成下图所示: 2)搭建一个简单的spring mvc例子 ①创建一个maven工程,其中pom中要有spring相关

【Bootstrap】入门例子创建

本文简单介绍下如何来使用 Bootstrap,通过引入 Bootstrap,来实现一个最基本的入门例子. 在前一篇博文[Bootstrap]1.初识Bootstrap 基础之上,我们完全可以更加方便快捷的创建一个的简单例子. 在Bootstrap的官方网站的下载页面 http://getbootstrap.com/getting-started/#download ,也有提供一些简单的例子.这里打算创建最简单的. 这里先在官网下载需要的基本文件: 下载后解压,可以看到它只包含三个文件夹: 准备工