摘要:目前已經(jīng)在大大小小多個線上產(chǎn)品中使用了,也收集了一些有效的建議好了,該看下一個最簡單的組件長什么樣吧免費領取驗證碼內(nèi)容安全短信發(fā)送直播點播體驗包及云服務器等套餐更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗分享請訪問網(wǎng)易云社區(qū)。文章來源網(wǎng)易云社區(qū)
本文由作者鄭海波授權(quán)網(wǎng)易云社區(qū)發(fā)布。
此文摘自regularjs的指南, 目前指南正在全面更新, 把老文檔的【接口/語法部分】統(tǒng)一放到了獨立的 Reference頁面.
Regularjs是基于動態(tài)模板實現(xiàn)的用于構(gòu)建數(shù)據(jù)驅(qū)動型組件的新一代類庫
關(guān)鍵詞
動態(tài)模板引擎
關(guān)于前端的模板技術(shù), 我在前端亂燉有一篇反響還算不錯的綜合性文章——一個對前端模板技術(shù)的全面總結(jié), 總體來講動態(tài)模板引擎是一種介于常規(guī)字符串模板(jade, ejs)和Dom模板(angulrjs, vuejs)之間的模板技術(shù), 它保證了regularjs的:
數(shù)據(jù)驅(qū)動的開發(fā)模式
100%的獨立性
一個regularjs組件的模板寫法類似這樣
× {#if needTitle}{msg.title}
{/if}
數(shù)據(jù)驅(qū)動
強制數(shù)據(jù)模型抽象是因
數(shù)據(jù)驅(qū)動的開發(fā)模式是果
數(shù)據(jù)驅(qū)動即強制將你的業(yè)務邏輯抽象為數(shù)據(jù)(狀態(tài))的變化, 這樣原本瑣碎的前端開發(fā)會更加貼近與編程本質(zhì)(算法 + 數(shù)據(jù)結(jié)構(gòu)), 帶來的開發(fā)體驗上的進步事實上早已被angularjs或更骨灰的knockout框架所驗證.
當然數(shù)據(jù)驅(qū)動的開發(fā)模式同時也帶來一些不便, 比如:
無法處理復雜的動畫
可控性不如直接的dom操作
數(shù)據(jù)模型抽象的方式有很多種, 但是目前不外乎以下幾種:
臟檢查
數(shù)據(jù)模型的臟檢查(angularjs / regularjs)
view抽象的臟檢查(react以及雨后春筍般的基于virtual dom的庫或框架)
存取器
計算屬性: defineProperty(vuejs, 黑科技avalonjs)
常規(guī)的setter/getter函數(shù)(Backbone, knockoutjs, ractivejs)
對于這個點, 本來也有一篇長文正在撰寫, 但是這篇2015前端框架何去何從差不多說出了我的心聲, 推薦大家閱讀.
組件
隨著angularjs等框架的大行其道, bootstrap等ui框架也提供了很多標簽上直接可配的使用方式. 大部分的人腦中對組件化的理解似乎開始停留在了【標簽化】這個層級上, 事實上組件的定義從來不曾改變過:
在前端開發(fā)領域, 組件應該是一種獨立的、可復用的交互元素的封裝
而在基于特定框架/類庫之下, 組件會被強加一種特定的構(gòu)建方式. 就如:
regularjs中, 組件被拆分為了: 模板template + 數(shù)據(jù)data + 業(yè)務邏輯(實例函數(shù))的組合, 每一份組件可以視為一個小型的mvvm系統(tǒng).
react中, 組件被拆分為了: state + virtual-dom聲明(render函數(shù)) + 業(yè)務邏輯的組合
angularjs1.x版本中, 事實上它的組件化是不純粹的, 推薦大家看下2.0的設計
一個典型的例子就是regularjs中組件的兩種使用方式:
js中實例化
var pager = new Pager({
data: { current: 1, total: 10 }
})
模板中實例化
它們帶來的結(jié)果是一致的, 我們可以看到標簽化只是組件的一種使用方式, 或是一種在模板中的接口形式, 關(guān)鍵是組件內(nèi)部的業(yè)務(領域)模型, 并且由于數(shù)據(jù)驅(qū)動的特性, 在mvvm模式下, 并不是所有可復用的交互元素都適合封裝成組件. 關(guān)于這點@民工精髓的這篇文章差不多說到了點子上.
組件與事件系統(tǒng)沒有直接關(guān)系, 但是一般而言,一個功能良好的組件會通過拋出事件來與外部系統(tǒng)進行溝通.
這里,是一個比較典型的基于regularjs構(gòu)建的Tabs組件.
Your username is: {user.username}
{#list todos as item}
Content of the first tab + {item} + {user.username}
{/list}
類庫
類庫代表regularjs具有100%的獨立性.
無依賴
每個組件生命周期完全自治, 只有一個獨立的model, 不會像angular一樣創(chuàng)建出深度的原型繼承,使用上讓人困惑的scope.
不會引入框架級的設施: 模塊系統(tǒng) + 模板加載 + 路由. 但是不證明它不能支持, 目前regularjs支持browserify, requirejs的插件預解析模板文件. 打包后的文件為一個標準的UMD模塊, 可以在commonjs, AMD, Globals下使用. 路由的話可以使用regular-state來創(chuàng)建深層次的單頁應用, 這個已經(jīng)在實際產(chǎn)品中被實踐過, 。
大小 對比后其實你會發(fā)現(xiàn), regularjs的大小始終維持在50kb, 對于同類的ractivejs, reactjs, angularjs動輒200kb+的大小, 它稱為類庫可謂非常厚道
相對精簡的內(nèi)核是regularjs成為一個能屈能伸的, 并對其他框架或類庫友好的關(guān)鍵所在.
新一代類庫
現(xiàn)在聲稱的下一代(Next-generation)框架越來越多了, 但是本質(zhì)永遠不會變(從根本和可能性討論問題, 程序員之間的扯皮其實是可以避免的 :) , 即
下一代框架應該順應前端開發(fā)的趨勢和潮流
我們目前就可以看得到得趨勢有:
web component: polymer x-tags
動畫: material design等設計趨勢, 硬件和瀏覽器的更新
同構(gòu)的javascript: 這一般會包含兩個組成方面: 單頁應用與 路由系統(tǒng). 我可以負責任的說, 目前的基于框架的同構(gòu)app實現(xiàn)基本還處于玩具級別, DEMO和產(chǎn)品的性質(zhì)是不同的
ES6/7: Object.observe / class/ imports等
....
在這些部分, regularjs有些完成了一些工作, 而有些還正在進行(但是已經(jīng)確保可能性).
regularjs有哪些特性
在實際使用中, 你會發(fā)現(xiàn), regularjs就如我發(fā)布初期的slogan:
regularjs = reactjs(ractivejs) + angularjs
在regularjs僅僅50kb的身材之下, 你能看到一些react, angularjs以及ractive的影子, 后來者往往有社區(qū)上的劣勢, 但換句話說它沒有任何歷史包袱, 在設計中去糟存精使得regularjs更加易用. 當然它絕對不是特性整合這么簡單, 它同時也提供了獨一無二的特性來幫助我們實現(xiàn)卓有成效的組件級開發(fā).
我們先簡單看下regularjs的特性支持:
幾乎完備ES5表達式支持
指令/過濾器(雙向)
一致的事件系統(tǒng)
動畫系統(tǒng)
單頁面支持: 需配合regular-state模塊
內(nèi)嵌組件 + 內(nèi)嵌內(nèi)容(transclued content)
良好的封裝性和擴展性
....
哦, 對了, 目前regularjs仍然支持IE6
這是一個令人羞愧的設定, 與作者所在的環(huán)境也有直接關(guān)系, 但是對于那些可能也需要支持IE6的朋友們, regularjs可能是一個比較安全的選擇.
regularjs未來會拉出一個支持度接近vuejs的版本, 但是特性不會發(fā)生改變, 大家可以放心使用。 regularjs目前已經(jīng)在大大小小多個線上產(chǎn)品中使用了, 也收集了一些有效的建議.
好了, 該看下一個最簡單的regularjs組件長什么樣吧..
免費領取驗證碼、內(nèi)容安全、短信發(fā)送、直播點播體驗包及云服務器等套餐
更多網(wǎng)易技術(shù)、產(chǎn)品、運營經(jīng)驗分享請訪問網(wǎng)易云社區(qū)。
文章來源: 網(wǎng)易云社區(qū)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/25376.html
摘要:一句化即它是插件的插件,作者事后才發(fā)現(xiàn)有這么一個插件繞了不少彎路。這里的主要是為了保存這段內(nèi)容用于打包使用。免費領取驗證碼內(nèi)容安全短信發(fā)送直播點播體驗包及云服務器等套餐更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗分享請訪問網(wǎng)易云社區(qū)。文章來源網(wǎng)易云社區(qū) 本文由作者鄭海波授權(quán)網(wǎng)易云社區(qū)發(fā)布。 前言我這里就不介紹requirejs了, 簡而言之: requirejs是支持AMD規(guī)范的模塊加載器, 事實上它也是...
摘要:以上面的例子為代表完整生命周期如下下一篇,應該會以為例,介紹一種基于來解決跨組件的數(shù)據(jù)通信的方式免費領取驗證碼內(nèi)容安全短信發(fā)送直播點播體驗包及云服務器等套餐更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗分享請訪問網(wǎng)易云社區(qū)。文章來源網(wǎng)易云社區(qū) 本文由作者鄭海波授權(quán)網(wǎng)易云社區(qū)發(fā)布。 背景在組件化不斷深入的大環(huán)境下,無論使用哪種 MDV 框架都最終會遇到一個頭疼的問題,就是「跨組件通信」。 下圖是個簡單的例子 ...
摘要:最近學習了,正好又完整的做了一個電商網(wǎng)站,就利用實現(xiàn)了一個組合查詢組件,首先介紹是個什么東西。庫存量單位,即庫存進出計量的單位,可以是以件盒托盤等為單位。在服裝鞋類商品中使用最多最普遍。 最近學習了angular,正好又完整的做了一個電商網(wǎng)站,就利用angular實現(xiàn)了一個sku組合查詢組件,首先介紹sku是個什么東西。sku=stock keeping unit(庫存量單位),sku...
摘要:前言終于要做這個計劃了,前端框架千千萬,絕不能一頭扎進去盲目開始,本片文章總結(jié)一下目前前各種端框架,以及它們的用途主要解決什么問題,然后最后做出學習計劃。希望入了前端坑的同學們可以有所幫助。但是庫與框架很難嚴格區(qū)分,所以統(tǒng)一稱為解決方案。 前言:終于要做這個計劃了,前端框架千千萬,絕不能一頭扎進去盲目開始,本片文章總結(jié)一下目前前各種端框架,以及它們的用途主要解決什么問題,然后最后做出學...
閱讀 2950·2021-11-23 09:51
閱讀 3776·2021-11-22 15:29
閱讀 3226·2021-10-08 10:05
閱讀 1552·2021-09-22 15:20
閱讀 952·2019-08-30 15:56
閱讀 1069·2019-08-30 15:54
閱讀 733·2019-08-26 11:54
閱讀 2636·2019-08-26 11:32