摘要:前端工程師就是在重復(fù)使用組裝這些區(qū)塊標(biāo)簽形成最終的需求頁(yè)面。這是最原子的區(qū)塊,我們要達(dá)到想要的頁(yè)面效果,就得不停的重復(fù)嵌套這些區(qū)塊。這些區(qū)塊通常是由多個(gè)標(biāo)簽組合而成的。這些區(qū)塊應(yīng)該很容易被復(fù)用。
轉(zhuǎn)載請(qǐng)注明出處: https://github.com/thx/magix/...
什么是區(qū)塊其實(shí)html標(biāo)簽就是區(qū)塊,比如 div span a等標(biāo)簽。前端工程師就是在重復(fù)使用、組裝這些區(qū)塊(html標(biāo)簽)形成最終的需求頁(yè)面。這是最原子的區(qū)塊,我們要達(dá)到想要的頁(yè)面效果,就得不停的重復(fù)嵌套這些區(qū)塊。
通常我們所說(shuō)的區(qū)塊是這些html標(biāo)簽的組合,比如當(dāng)我們開(kāi)發(fā)一個(gè)項(xiàng)目時(shí),每個(gè)頁(yè)面通常都是由多個(gè)邏輯無(wú)關(guān)的區(qū)塊組成的,如常見(jiàn)的頁(yè)頭、頁(yè)尾、內(nèi)容區(qū)。這些區(qū)塊通常是由多個(gè)html標(biāo)簽組合而成的。
我們可以借簽html標(biāo)簽的這種嵌套及DOM Tree思路的,開(kāi)發(fā)一套用于組合嵌套這種大區(qū)塊的框架。這就是接下來(lái)要介紹的magix做的事情
定義區(qū)塊在這里我們把區(qū)塊定義為由一段html標(biāo)簽組成的代碼片斷,區(qū)塊最小是一個(gè)標(biāo)簽,如。區(qū)塊可以像html標(biāo)簽一樣嵌套,即一個(gè)區(qū)塊可以由多個(gè)子區(qū)塊組成
項(xiàng)目中的區(qū)塊當(dāng)我們?cè)陂_(kāi)發(fā)一個(gè)項(xiàng)目時(shí),如前面提到的頁(yè)頭、頁(yè)尾、內(nèi)容區(qū)等,這些在我們項(xiàng)目里就是一個(gè)個(gè)區(qū)塊,當(dāng)然像內(nèi)容區(qū)我們?nèi)匀豢梢栽俨鸱肿訁^(qū)塊。像頁(yè)頭、頁(yè)尾在項(xiàng)目里可以理解為原子區(qū)塊,沒(méi)必要再拆分了。這些區(qū)塊應(yīng)該很容易被復(fù)用。
準(zhǔn)備工作magix適配了不同的加載器與dom操作類(lèi)庫(kù),有amd、cmd及kissy,可點(diǎn)擊這里查看,當(dāng)然您也可以自己定制,定制方法點(diǎn)擊這里
接下來(lái)我們使用cmd版本,即seajs+jq來(lái)講解magix的區(qū)塊化管理
安裝新建一個(gè)magix-test目錄,在magix-test目錄里放上package.json文件如下:
{ "name": "magix-test", "version": "1.0.0", "description": "magix示例項(xiàng)目", "keywords": [ "magix", "view" ], "dependencies": { "jquery": "", "seajs": "", "magix": "" }, "author": "xinglie", "license": "MIT" }
然后通過(guò)npm install把seajs、jquery及magix安裝到本機(jī)
頁(yè)面開(kāi)發(fā)新建index.html如下
Magix-test
這樣我們的首頁(yè)就完成了,接下來(lái)我們開(kāi)發(fā)header及footer,然后把它們渲染到index.html里相應(yīng)的位置上。
我們?cè)趍agix-test目錄下新建views目錄,我們把新建的header及footer放到該目錄里
header.js如下
define("views/header", ["magix"], function(require) { var Magix = require("magix"); return Magix.View.extend({ render: function() { var html = "I am header"; this.setHTML(this.id, html); } }); });
新建footer.js,代碼如header
然后我們修改index.html,加載header及footer,修改后的index.html如下
Magix-test
然后在web server中查看index.html即可,如果沒(méi)什么問(wèn)題應(yīng)該就能看到header及footer已經(jīng)渲染到了相應(yīng)的節(jié)點(diǎn)里
事件處理你可以用jquery的事件在render方法中自己綁定,也可以使用magix定義的方法書(shū)寫(xiě)事件,推薦使用magix定義的方法來(lái)處理事件:高性能,自動(dòng)解綁
我們修改header.js如下
define("views/header", ["magix"], function(require) { var Magix = require("magix"); return Magix.View.extend({ render: function() { var html = "I am header "; this.setHTML(this.id, html); }, "processLogin":function(e){ console.log(e); alert("Login"); } }); });
這樣就完成了事件的處理。
magix內(nèi)部也是對(duì)接的jquery的事件處理函數(shù),并非自己另外寫(xiě)了一套事件處理,只是在這個(gè)過(guò)程中magix有優(yōu)化,所以推薦使用magix的寫(xiě)法。
實(shí)際開(kāi)發(fā)中區(qū)塊會(huì)非常復(fù)雜,我們通常把一個(gè)復(fù)雜的區(qū)塊再拆分子區(qū)塊,然后再組裝起來(lái)。我們這里假設(shè)header非常復(fù)雜,比如我們新建一個(gè)header-login區(qū)塊用于多帶帶處理登錄的事情。
header-login代碼如下
define("views/header-login", ["magix"], function(require) { var Magix = require("magix"); return Magix.View.extend({ render: function() { var html = ""; this.setHTML(this.id, html); }, "processLogin":function(e){ console.log(e); alert("Login"); } }); });
既然login已經(jīng)多帶帶成區(qū)塊了,我們修改header.js,直接引用views/header-login區(qū)塊
define("views/header", ["magix"], function(require) { var Magix = require("magix"); return Magix.View.extend({ render: function() { var html = "I am header "; this.setHTML(this.id, html); } }); });
我們只需要在header.js中通過(guò)mx-view標(biāo)簽屬性引用另外一個(gè)區(qū)塊即可。這樣就完成了子區(qū)塊的拆分及組裝功能。
刷新index.html我們可以看到和之前沒(méi)拆分時(shí)是一樣的
我們這樣組裝出來(lái)的頁(yè)面,看上去和普通頁(yè)面是一樣的,但是我們?nèi)绾慰焖僦理?yè)面上被拆分了哪些區(qū)塊,及區(qū)塊間的關(guān)系呢?這時(shí)候需要magix的配套工具magix-inspector
這是一個(gè)js文件,我們可以通過(guò)引入線(xiàn)上鏈接或npm包,更多引入方式可以查看https://github.com/thx/magix-inspector
我們修改index.html,引入線(xiàn)上鏈接
在index.html的head中增加如下script標(biāo)簽
刷新index.html就可以看到右上角有一個(gè)區(qū)塊間關(guān)系圖,鼠標(biāo)指向各個(gè)區(qū)塊會(huì)高亮當(dāng)前區(qū)塊的范圍及區(qū)塊的路徑地址等信息
可視化工具所展示的區(qū)塊間關(guān)系其實(shí)和DOM Tree是非常一致的
區(qū)塊化的好處我們可以把一個(gè)復(fù)雜的頁(yè)面拆分成n個(gè)獨(dú)立的區(qū)塊多帶帶維護(hù)與處理,方便多人同時(shí)開(kāi)發(fā),同時(shí)當(dāng)一個(gè)區(qū)塊復(fù)雜時(shí),我們?nèi)匀豢梢钥焖俚陌阉M(jìn)行拆分,然后再組裝回來(lái),避免出現(xiàn)一個(gè)龐大的js文件。
這種區(qū)塊可以通過(guò)mx-view標(biāo)簽屬性被引用在項(xiàng)目中的任何地方,當(dāng)一個(gè)區(qū)塊被復(fù)用在多個(gè)地方時(shí)非常方便,比如這時(shí)候你可以在index.html里再添加上一個(gè)
magix核心功能壓縮后僅6kb,gzip后只有3kb,非常小,但功能非常強(qiáng)大,今天介紹的僅僅是冰山一角。
阿里媽媽所有后臺(tái)產(chǎn)品及營(yíng)銷(xiāo)頁(yè)面均是用magix開(kāi)發(fā),這里放幾個(gè)鏈接
阿里媽媽幫助中心
afp
智鉆
magix的項(xiàng)目地址在這里https://github.com/thx/magix
歡迎試用~
如果你不想按上述教程自己建文件,我把上述示例中的代碼放到了附件里,可以點(diǎn)擊鏈接下載
鏈接是淘云盤(pán)的,鏈接為 http://yunpan.taobao.com/s/2lRwLK22mnX 提取碼為:73bzKa
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/91624.html
摘要:轉(zhuǎn)載請(qǐng)注明出處需求已知格式化日期字符串為或等常見(jiàn)的格式化字符串已知和這個(gè)格式化字符串對(duì)應(yīng)的格式化后的日期為或求年月日解當(dāng)然這里可以默認(rèn)日這里只做了年月日加時(shí)分秒也是可以的測(cè)試月日年月日年歡迎試用, 轉(zhuǎn)載請(qǐng)注明出處:https://github.com/xinglie/xi... 需求: 1 已知格式化日期字符串format 為 YYYY-MM-DD 或 DD/MM/YYYY等常見(jiàn)的格式...
摘要:轉(zhuǎn)載請(qǐng)注明出處需求已知格式化日期字符串為或等常見(jiàn)的格式化字符串已知和這個(gè)格式化字符串對(duì)應(yīng)的格式化后的日期為或求年月日解當(dāng)然這里可以默認(rèn)日這里只做了年月日加時(shí)分秒也是可以的測(cè)試月日年月日年歡迎試用, 轉(zhuǎn)載請(qǐng)注明出處:https://github.com/xinglie/xi... 需求: 1 已知格式化日期字符串format 為 YYYY-MM-DD 或 DD/MM/YYYY等常見(jiàn)的格式...
摘要:當(dāng)用戶(hù)鼠標(biāo)在滾動(dòng)條上按下的時(shí)候,我們可以假設(shè)他她正在瀏覽網(wǎng)頁(yè)內(nèi)容,那么這個(gè)時(shí)候好的用戶(hù)體驗(yàn)就不能讓滾動(dòng)條再自動(dòng)滾動(dòng)了。為了實(shí)現(xiàn)這個(gè)功能,可能大家首先會(huì)想到的就是和事件了。 轉(zhuǎn)載請(qǐng)注明出處:https://github.com/xinglie/xi... 網(wǎng)頁(yè)內(nèi)容區(qū)域自動(dòng)滾動(dòng),滾動(dòng)條會(huì)隨著內(nèi)容的增加自動(dòng)往下滾動(dòng)。 當(dāng)用戶(hù)鼠標(biāo)在滾動(dòng)條上按下的時(shí)候,我們可以假設(shè)他(她)正在瀏覽網(wǎng)頁(yè)內(nèi)容,那么...
摘要:需求描述進(jìn)行復(fù)雜項(xiàng)目開(kāi)發(fā)時(shí),服務(wù)端數(shù)據(jù)接口實(shí)現(xiàn)端會(huì)把接口拆分的比較細(xì)粒度,以方便在更多地方復(fù)用。 需求描述 進(jìn)行復(fù)雜項(xiàng)目開(kāi)發(fā)時(shí),服務(wù)端(數(shù)據(jù)接口實(shí)現(xiàn)端)會(huì)把接口拆分的比較細(xì)粒度,以方便在更多地方復(fù)用。而拆分后的接口在前端進(jìn)行組合請(qǐng)求時(shí),通常會(huì)出現(xiàn)一個(gè)區(qū)塊要請(qǐng)求5、6個(gè)接口甚至更多接口請(qǐng)求才能拿到想要的數(shù)據(jù),過(guò)多的數(shù)據(jù)請(qǐng)求會(huì)導(dǎo)致區(qū)塊渲染較慢,移動(dòng)端表現(xiàn)尤為明顯。為了改善這種情況,也有在服...
閱讀 712·2021-11-22 13:52
閱讀 1517·2021-09-27 13:36
閱讀 2818·2021-09-24 09:47
閱讀 2172·2021-09-22 15:48
閱讀 3600·2021-09-22 15:39
閱讀 1460·2019-08-30 12:43
閱讀 2918·2019-08-29 18:39
閱讀 3181·2019-08-29 12:51