詳解JavaScript的Polymer框架中的通知交互
Polymer 以訪問器屬性的形式來定義有監(jiān)聽需求的屬性(沒有監(jiān)聽需求的屬性依然是普通的屬性形式定義)。模板中還可以采用「::」語法來將屬性雙向同步于目標(biāo)元素的某個(gè)事件,這就是 Angular 中雙向綁定的概念,甚至還要比它更純粹、更貼近原理。
在 properties 中定義的屬性如果沒有添加 notify 并且沒在模板中用到,那么它就是沒有監(jiān)聽需求的,于是就會被定義成普通屬性。否則都會被定義成訪問器屬性,下面例子就解釋了這個(gè)問題
運(yùn)行
<script> var Polymer = { dom: 'shadow' }; </script> <base /> <link rel="import" href="polymer/polymer.html" /> <dom-module id="demo-test"> <template> <h1>[[z]]</h1> </template> <script> Polymer({ is: 'demo-test', properties: { x: { value: 'x' }, y: { value: 'y', notify: true } }, ready: function() { console.log(Object.getOwnPropertyDescriptor(this, 'x')); console.log(Object.getOwnPropertyDescriptor(this.__proto__, 'y')); console.log(Object.getOwnPropertyDescriptor(this.__proto__, 'z')); } }); </script> </dom-module> <demo-test></demo-test>
設(shè)置了 notify 為 true 的屬性在其發(fā)生變化時(shí)會產(chǎn)生一個(gè)「屬性名-changed」事件。注意屬性名和 changed 中間用橫桿鏈接,并且 changed 是過去時(shí)態(tài),而不是 change 原形。Polymer 可以使用 listeners 來添加事件監(jiān)聽,但不能直接綁定到函數(shù)上,而必須綁定到某個(gè)屬性名上(我不明白為什么要這么設(shè)計(jì))。
運(yùn)行
<script> var Polymer = { dom: 'shadow' }; </script> <base /> <link rel="import" href="polymer/polymer.html" /> <dom-module id="demo-test"> <template> <h1>[[i]]</h1> </template> <script> Polymer({ is: 'demo-test', properties: { i: { value: 0, notify: true } }, ready: function() { setInterval(function(that) { that.i++; }, 100, this); }, listeners: { 'i-changed': 'iChangeHandler' }, iChangeHandler: function(event) { console.log(event.detail.value); } }); </script> </dom-module> <demo-test></demo-test>
事件可以在模板中使用「::」語>法來捕獲,而且這些事件包括了上面產(chǎn)生的通知事件和用戶主動觸發(fā)的交互事件。
運(yùn)行
<script> var Polymer = { dom: 'shadow' }; </script> <base /> <link rel="import" href="polymer/polymer.html" / <dom-module id="demo-test"> <template> <input value="{{text::input}}" /><hr/> <textarea value="{{css::input}}"></textarea><hr/> <h1 style$="[[css]]">[[text]]</h1> </template> <script> Polymer({ is: 'demo-test' }); </script> </dom-module> <demo-test></demo-test>
注意上面是 style$="[css]" 而不是直接的 style="css",因?yàn)榇颂幨琴x值給元素的 attribute 上,而不是純粹的 property 賦值。所以在等號前面加一個(gè)「$」(其實(shí)我覺得這個(gè)語法看起來非常奇怪)。
以上這些就是我所知道的 Polymer 中所有關(guān)于數(shù)據(jù)綁定的內(nèi)容了。也許有遺漏,可能會在其它文章中補(bǔ)充。
相關(guān)文章
JavaScript字符串對象split方法入門實(shí)例(用于把字符串分割成數(shù)組)
這篇文章主要介紹了JavaScript字符串對象split方法入門實(shí)例,split方法用于把字符串分割成數(shù)組,需要的朋友可以參考下2014-10-10javascript學(xué)習(xí)筆記(五) Array 數(shù)組類型介紹
javascript學(xué)習(xí)筆記之Array 數(shù)組類型介紹,需要的朋友可以參考下2012-06-06javascript中的遍歷for in 以及with的用法
這篇文章主要介紹了javascript中的類初始化,遍歷for in 以及with的用法,需要的朋友可以參考下2014-12-12THREE.JS入門教程(5)你應(yīng)當(dāng)知道的十件事
Three.js是一個(gè)偉大的開源WebGL庫,WebGL允許JavaScript操作GPU,在瀏覽器端實(shí)現(xiàn)真正意義的3D,本文會讓你了解一下使用THREE.JS處理3D/避免SetInterval/使用倒序循環(huán)等等,感興趣的朋友可以了解下哦2013-01-01javascript中數(shù)組的多種定義方法和常用函數(shù)簡介
本文簡單介紹了javascript一維數(shù)組和二維數(shù)組的定義方法集錦以及常用函數(shù)簡介。2014-05-05