摘要:大前端東南水鄉一葉小舟拂過水面船上兩位大俠把酒言歡一位是玉真人另一位是張真人兩人喝到開心處變作對聯起來上聯前端研究,研究個屁下聯前端設計,設計個屁橫批前端特色提供創建自定義和標準元素類似的自定義元素功能可以使用或者創建元素可以配置元素或可以
大前端
特色東南水鄉 一葉小舟拂過水面 船上兩位大俠把酒言歡 一位是玉真人 另一位是張真人 兩人喝到開心處 變作對聯起來 上聯 前端研究,研究個屁~ 下聯 前端設計,設計個屁~ 橫批 前端sb
polymer 提供創建自定義和標準dom元素類似的自定義元素功能
可以使用constructor或者document.createElement創建元素
可以配置元素attributes或properties
可以在標簽內部定義一些dom
可以對屬性和屬性的變化處理
可以有一些默認的樣式,在外部修內部樣式
可以提供方法允許你來操縱它的內部狀態
一個基本的polymer元素定義如下:
{{greeting}}
像普通標簽一樣使用
注冊和生命周期 注冊自定義元素
使用polymer注冊一個元素,使用is屬性指明要注冊元素的名稱
// register an element MyElement = Polymer({ is: "my-element", // See below for lifecycle callbacks created: function() { this.innerHTML = "My element!"; } }); // create an instance with createElement: var el1 = document.createElement("my-element"); // ... or with the constructor: var el2 = new MyElement();
polymer function 將元素注冊到瀏覽器上 并且 返回一個創建新實例的元素構造函數
定義一個自定義構造函數polymer function返回一個基本的構造函數,可用于實例化自定義元素,如果你想要向構造函數傳遞參數配置新元素,您可以指定一個自定義構造函數原型。
MyElement = Polymer({ is: "my-element", constructor: function(foo, bar) { this.foo = foo; this.configureWithBar(bar); }, configureWithBar: function(bar) { ... } }); var el = new MyElement(42, "octopus");
自定義函數只當使用構造函數時調用,作為html標記解析時不調用
自定義函數在元素初始化后調用
擴展html元素MyInput = Polymer({ is: "my-input", extends: "input", created: function() { this.style.border = "1px solid red"; } }); var el1 = new MyInput(); console.log(el1 instanceof HTMLInputElement); // true var el2 = document.createElement("input", "my-input"); console.log(el2 instanceof HTMLInputElement); // true
回調生命周期
MyElement = Polymer({ is: "my-element", created: function() { console.log(this.localName + "#" + this.id + " was created"); }, attached: function() { console.log(this.localName + "#" + this.id + " was attached"); }, detached: function() { console.log(this.localName + "#" + this.id + " was detached"); }, attributeChanged: function(name, type) { console.log(this.localName + "#" + this.id + " attribute " + name + " was changed to " + this.getAttribute(name)); } });準備回調和元素初始化
ready: function() { this.$.header.textContent = "Hello!"; }
created callback
local DOM constructed
default values set
ready callback
custom constructor (if any)
attached callback
注冊回調Polymer.Base also implements registerCallback, which is called by Polymer() to allow Polymer.Base to supply a layering system for Polymer features.
標簽靜態屬性如果一個自定義標簽需要標簽上出現attributes要在hostAttrbuites下寫 值為true會被轉變為空
false 該屬性不會添加
fun-mixin.html
FunMixin = { funCreatedCallback: function() { this.makeElementFun(); }, makeElementFun: function() { this.style.border = "border: 20px dotted fuchsia;"; } }; });
my-element.html
類樣式的構造函數
如果你想實現你的元素,但并不注冊他,你可以使用Polymer.class function Polymer.class和Polymer有著相同的屬性配置,設置原型鏈,沒有注冊元素,可以用document.registerElement 注冊。
申明屬性你可以在你的元素上聲明有哪些properties通過在polymer構造函數原型properties寫
可以聲明那些配置
屬性類型
默認值
屬性改變觀察者
只讀
出發事件
基于別的屬性計算屬性
屬性值改變時跟新相關
Polymer({ is: "x-custom", properties: { user: String, isHappy: Boolean, count: { type: Number, readOnly: true, notify: true } }, ready: function() { this.innerHTML = "Hello World, I am a Custom Element!"; } });
key | details |
---|---|
type | (Boolean,Date,Number,String,Array,Object) |
value | (Boolean,Number,String,Function) 默認值 |
reflectToAttribute | (Boolean) |
readyOnly | (Boolean) |
notify | (Boolean) |
computed | (String) |
observer | (String) 屬性觀察者函數名 |
當映射 attribute name 到 property names
attribute names 轉換成 小寫 property names 比如firstName 映射成 firstname
attribute names 帶破折號 轉換成 駝峰命名 property namses 比如first-name 映射成
firstName
property names 映射成 attribute names時一致
反序列化屬性屬性最好設置type
attributes dash-case 風格 轉換成 camel-case 風格
配置默認屬性值
properties 的默認值可以再properties對象使用value屬性 可以是一個原始值或者一個function的返回值
Polymer({ is: "x-custom", properties: { mode: { type: String, value: "auto" }, data: { type: Object, notify: true, value: function() { return {}; } } } });屬性更改回調(觀察者)
Polymer({ is: "x-custom", properties: { disabled: { type: Boolean, observer: "disabledChanged" }, highlight: { observer: "highlightChanged" } }, disabledChanged: function(newValue, oldValue) { this.toggleClass("disabled", newValue); this.highlight = true; }, highlightChanged: function() { this.classList.add("highlight"); setTimeout(function() { this.classList.remove("highlight"); }, 300); } });觀察多個屬性更改
Polymer({ is: "x-custom", properties: { preload: Boolean, src: String, size: String }, observers: { "preload src size": "updateImage" }, updateImage: function(preload, src, size) { // ... do work using dependent values } });觀察更改子屬性 local Dom
我們叫把可以創造和管理的dom叫local dom
polymer支持創建multiple local dom 在支持shadow dom的瀏覽器上 shadow dom用來創建local dom
在其他瀏覽器 polymer通過自定義實現的shadow dom提供local dom
使用
scoped stylingI am x-foo!
Styling distributed children (::content) In local Dom!
在這個例子,這個規則
.content-wrapper ::content > .special
翻譯為
.content-wrapper > specialAutomatic node finding
內部元素使用id聲明 使用this.$ hash選擇
DOM (re-)distribution文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85687.html
摘要:所以又以一個庫的身份出現在世人面前,它現階段要做的就是使用的規范來進行開發,并且提供了一套底層實現來填補了各大瀏覽器暫不支持的,我們稱為填充物也就是要干的事情。 書接上回上一篇我們介紹了神馬是Polymer,這一篇我們來做些正式編碼前的準備工作,順便也扯一扯Polymer的真面目 如何安裝Polymer 有兩種方式:第一種是bower安裝,不要問我bower是什么,不會bower的話,...
摘要:從協作關系上講,很多前端開發團隊每個成員的職責不是很清晰,有了前端的框架,這個狀況會大有改觀。框架的理念是把前端按照職責分層,每一層都相對比較獨立,有自己的價值,也有各自發揮的余地。 簡介: MV框架又是為什么興起的呢?它的出現,伴隨著一些 Web 產品逐漸往應用方向發展,遇到了在 C/S 領域相同的問題:由于前端功能的增強、代碼的膨脹,導致不得不做前端的架構這個事情了。經常有人質疑...
摘要:而不寫,則監聽是加在整個組件之上的。組件的輸入就是屬性賦值,輸出則是事件的觸發。運行結果消息機制這里來聊聊組件化開發的消息機制,這個并不局限于或者應用,適用于所有的組件式開發技術。 這篇會講下組件內部的事件處理機制,以及組件和外界通訊的處理方式(父子通訊,兄弟通訊等) 組件內的事件處理機制 第一種,直接寫在標簽里,用on-eventName=eventHandler的方式 ...
閱讀 1208·2021-09-30 09:47
閱讀 3758·2021-09-06 15:02
閱讀 1765·2021-09-01 10:46
閱讀 2353·2019-08-30 15:52
閱讀 587·2019-08-29 15:28
閱讀 1867·2019-08-29 15:08
閱讀 1142·2019-08-29 13:28
閱讀 2565·2019-08-29 12:19