第一個Polymer應用,第一個polymer
原文連結: Step 4: Finishing touches
翻譯日期: 2014年7月8日
翻譯人員: 鐵錨
在本節中,會在卡片上添加收藏按鈕,並可以通過切換選項卡(tabs)串連到不同的 <post-list> 控制器, 整個應用就算完成了.
在本節中,您將學習:
- 聲明事件處理(event handling)
- 向元素的原型(prototype)添加屬性和方法(properties and methods)
- 自動節點尋找(Automatic node finding)
編輯 post-card.html 檔案
進入根目錄下的starter目錄, 開啟
post-card.html 檔案. 添加
<core-icon> 元素:
<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>
說明:
- 顧名思義, <core-icon-button> 建立一個嵌入表徵圖的button. Polymer 包含了一寫可伸縮的表徵圖集合。
- icon="favorite" 屬性從預設表徵圖集中選擇心形表徵圖.
- on-tap="{{favoriteTapped}}" 屬性在 post-card 元素上指定一個回調方法,當觸摸(tap)按鈕時就會調用。
---------------------------------------------------------------------------------------------
將
favorite 屬性(property) 以及
favoriteTapped 方法添加到元素的原型(prototype).
<script> Polymer({ publish: { favorite: { value: false, reflect: true } }, favoriteTapped: function(event, detail, sender) { this.favorite = !this.favorite; this.fire('favorite-tap'); } }); </script>
說明:
- publish 對象是另一種指定發布屬性的方式,和步驟3中所示的 attributes 屬性一樣的功能。此處 favorite 屬性的預設值為 false , 通過設定反射(reflects), 意味著在屬性值發生變化時 favorite 屬性會被更新
- favoriteTapped事件切換 favorite 屬性(this.favorite)的狀態,並使用內建的 fire 方法觸發自訂事件,。( fire 是 Polymer 添加到每個自訂元素原型的工具方法之一)
這些變化的結果是,當觸摸
favorite 按鈕時,
favorite 屬性值被更新, 並且根據其相應的屬性被設定或還原。
但現在還沒有標識按鈕被按下的視覺效果。
---------------------------------------------------------------------------------------------------
為 favorite 按鈕添加以下CSS樣式:
core-icon-button { position: absolute; top: 3px; right: 3px; fill: #636363; } :host([favorite]) core-icon-button { fill: #da4336; }
說明:
- fill 屬性設定表徵圖的填充顏色。
- :host([favorite]) core-icon-button 選取器設定當自訂元素設定了 favorite 屬性時的填充顏色.
-------------------------------------------------------------------------------
儲存
post-card.html.
儲存之後,你可以重新整理頁面,看看
favorite 按鈕的效果, 當然還有一些步驟需要完成。
編輯 index.html 檔案
開啟
index.html ,更新tab的事件處理器,當使用者切換選項卡時切換
<post-list> 的狀態:
<script> // 擷取選項卡DOM元素 paper-tabs var tabs = document.querySelector('paper-tabs');var list = document.querySelector('post-list'); // 添加事件監聽, 很明顯,你需要chrome瀏覽器來運行 // 這裡每次切換會觸發2次,前一個tab取消選中,以及新tab被選中 tabs.addEventListener('core-select', function(e) { // list.show = tabs.selected; // var detail = e["detail"] || {}; var item = detail["item"] || {}; var isSelected = detail["isSelected"]; console.log( "Tab(\""+ item["innerText"] + "\") changeTo: "+ isSelected +";" +" [" + tabs.selected + "] isSelected " ); }); </script>
儲存
index.html 檔案.
-------------------------------------------------------------------------------------
編輯 post-list.html
在編輯器中開啟
post-list.html 檔案.
更新
template ,將
<post-card> 元素串連上favorites:
<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>
說明:
- favorite="{{post.favorite}}" 將卡片元素的 favorite 值綁定到 <post-service> 持有數組中的值
- on-favorite-tap屬性為 <post-card> 的 favorite-tap 事件設定一個事件處理常式
- hidden?="{{}}" 運算式是boolean屬性的特殊文法,如果綁定的運算式計算值為true則設定該屬性
hidden 的綁定運算式實際的作用是在 <
所有> 與 <
收藏> 選項卡之間切換。
-----------------------------------------------------------
為
favorite-tap 事件添加事件處理常式:
<script> Polymer({ handleFavorite: function(event, detail, sender) { var post = sender.templateInstance.model.post; this.$.service.setFavorite(post.uid, post.favorite); } }); </script>
說明:
- sender.templateInstance.model 是模型資料的一個引用,用來構建模板執行個體。在這裡,它包含用來建立一個 <post-card> 的 post對象, 所以你可以擷取它的ID以及 favorite 值。
- 自訂元素的 shadow DOM 中的每個元素都有一個 id 屬性被加到了 this.$ 字典(dictionary)中。這被稱為自動節點發現(automatic node finding.)
如果這是一個真實的社交網路服務, setFavorite 方法會將資料的改變儲存到伺服器。在這個樣本中,除了列印一下日誌控制台訊息外並沒有處理這些工作。
大功告成
儲存(建議編輯過程中隨時儲存,這是好的編碼習慣)
post-list.html 檔案,部署,然後用chrome開啟連結或重新整理頁面, 比如:
http://localhost:8080/polymer-tutorial-master/starter/index.html
大功告成! 如果幸運的話,您的應用程式看起來像這樣:
圖 Step4完成後的效果.
如果發生錯誤或不顯示,可以和
finished 目錄下的
post-card.html, post-list.html, index.html 檔案對比,當然,你也可以直接存取這下面的檔案試試效果。
開始下一個項目
準備好開始一個你自己的項目了嗎?安裝一些 Polymer 組件並開始工作吧!
--> 下一個項目: 安裝組件(Installing components)
在應用程式中建立第一個 IWin32Window 對象之前,必須調用 SetCompatibleTextRenderingDefault
如何修改應用程式的名字 在Project-->Setting-->Link:output file name -->Debug/AppName.exe----------------------------------------------------VC6.0的18個實用小技巧1.檢測程式中的括弧是否匹配 把游標移動到需要檢測的括弧(如大括弧{}、方括弧[]、圓括弧()和角括弧<>)前面,鍵入快速鍵“Ctrl+]”。如果括弧匹配正確,游標就跳到匹配的括弧處,否則游標不移動,並且機箱喇叭還會發出一聲警告聲。 2.查看一個宏(或變數、函數)的宏定義 把游標移動到你想知道的一個宏上,就比如說最常見的DECLARE_MAP_MESSAGE上按一下F12(或右鍵菜單中的Go To Defition Of …),如果沒有建立Browse files,會出現提示對話方塊,確定,然後就會跳到定義那些東西的地方。 相當可喜的是,它也可以看到Microsoft定義的系統宏,非常good. 3.格式化一段亂七八糟的原始碼 選中那段原始碼,按ATL+F8。 4.在編輯狀態下發現成員變數或函數不能顯示 刪除該項目副檔名為.ncb檔案,重新開啟該項目。 5.如何整理ClassView視圖中大量的類 可以在classview 視圖中右鍵建立檔案夾(new folder),再把具有相近性質的類拖到對應的檔案夾中,使整個視圖看上去清晰明了. 6.定位預先處理指定 在源檔案中定位游標到對稱的#if, #endif,使用Ctrl+K. 7.如何添加系統中Lib到當前項目 在Project | Settings | Link | Object/library modules:輸入Lib名稱,不同的Lib之間用空格格開. 8.如何添加系統中的標頭檔(.h)到當前項目. #include ,告訴編譯到VC系統目錄去找;使用#include "FileName.h",告訴編譯在目前的目錄找. 9.如何在Studio使用彙編調試 在WorkBench的Debugger狀態下按CTRL+F7. 10.怎樣處理ClassZiard找不到的系統訊息 如果要在ClassWizard中處理WM_NCHITTEST等系統訊息,請在ClassWizard中Class Info頁中將Message filter改為Window就有了. 11.如何乾淨的刪除一個類 先從Workspace中的FileView中刪除對應的.h和.cpp檔案,再關閉項目,從實際的檔案夾中刪除對應的.h和.cpp檔案與.clw檔案。 12.在Studio中快速切換兩個檔案 有時,我們需要在最近使用的兩個檔案中快速切換,換Ctrl+F6。這在兩個檔案不相今的時候就有用的. 13.取得來源程式預先處理後的結果: 在Studio裡,可以在->PROJECT-> SETTINGS->C/C++->Project Options中,在最後加上 /P /EP這兩個編譯開關即可做到"只進行預先處理".就可以了。編譯以後就可以在來源程式目錄中發現“檔案名稱.I ”的文字檔。這就是預先處理後的結果。 (注意註:區分大小定,請用大定/P) 14.在Debug模式中查看WINAPI調用後的傳回值: 很簡單,且實用:在watch中加入@hr,err。在CSDN......餘下全文>>
Polymer與ABS相對於塑料的優勢
簡單說下,polymer是彙總物的意思,是一種統稱,例如塑料;而ABS是塑料的一種,可以說屬於polymer,ABS是三種單體共聚而成,不是單一的單體共聚。
如果提到樂器,我不知道你具體指哪一種,我接觸過架子鼓,其中鼓膜就是採用一種塑料製成,叫做PET,當然低檔也有PVC的,中國傳統的也有用牛皮做的,看要求,PET的抗擊打,抗劃傷等能力很強,音色也很悅耳;至於其他方面,樂器中也有不少的塑料部分,或是橡膠部分,都屬於polymer,至於ABS的特點就是材料的表面光澤度很好,硬度也不錯,所以外觀很漂亮,對於音色要看各種情況了,如果LZ感興趣的話可以看一些高分子的書,裡面會介紹很多關於polymer的知識,不過關於樂器的應用應該沒有,看看樂器製造方面的書吧。