摘要:業(yè)務(wù)組件模塊化拆分復(fù)用后整體可維護(hù)性也得到了很大提升。先贊一個(gè)當(dāng)然凡事都有相對(duì)的一面,此篇文字就主要記錄自己在項(xiàng)目過(guò)程中的一些問(wèn)題。
項(xiàng)目背景原文地址:http://mtmzorro.github.io/201...
需要兼容到IE7(根據(jù)數(shù)據(jù)支撐重要說(shuō)服拋棄IE6)
上個(gè)版本傳統(tǒng) jQuery DOM 開(kāi)發(fā)模式,經(jīng)過(guò)無(wú)數(shù)手維護(hù)已經(jīng)慘不忍睹
核心業(yè)務(wù)流程,可維護(hù)性、健壯性要求高
主要業(yè)務(wù)邏輯流程單頁(yè)內(nèi)完成
接到這個(gè)項(xiàng)目改版規(guī)劃之后,首先想到的是引入一個(gè) MVVM 框架來(lái)解放對(duì) DOM 的操作,上個(gè)版本基本就是因?yàn)閼?yīng)該其他部門多次插手開(kāi)發(fā)后造成可維護(hù)性急劇下降。
最早是計(jì)劃使用 VUE + VUEX 來(lái)重構(gòu)此項(xiàng)目(之后確實(shí)自己重構(gòu)了一把),考慮到之前 VUE 項(xiàng)目中對(duì) IE8 以下還是有一些不可控的潛在坑,就把視線轉(zhuǎn)移到了 avalon 這個(gè)可以支持到 IE6 的框架上
事實(shí)證明,avalon 很好的完成了此項(xiàng)任務(wù),在業(yè)務(wù)邏輯增加的前提下,整體項(xiàng)目代碼比之前縮減了60%。業(yè)務(wù)組件模塊化拆分復(fù)用后整體可維護(hù)性也得到了很大提升。先贊一個(gè)!
當(dāng)然凡事都有相對(duì)的一面,此篇文字就主要記錄自己在項(xiàng)目過(guò)程中的一些問(wèn)題。
問(wèn)題List 官網(wǎng)提供的 2.2.4 avalon.js IE8 下報(bào)錯(cuò)使用 https://cdn.staticfile.org/av... IE8下一直報(bào)錯(cuò),最后通過(guò)到avalon github,下載所使用的2.2.4版本自己壓縮打包后解決。
組件slot在 2.2.4 版本中和API文檔中表現(xiàn)差異較大官方demo 組件 slot https://segmentfault.com/a/11... 2.1.17版本下就可以 之后的2.2.4 版本中 slot 內(nèi)外就沒(méi)有通信方式了(但切換低版本 組件方式就全變)。
為此專門重寫(xiě)一個(gè) avalon.extendComponent 方法來(lái)實(shí)現(xiàn)組件的繼承和擴(kuò)展,解決組件復(fù)用時(shí)局部自定義的需求。
// avalon extendComponent 組件繼承擴(kuò)展 // Thanks aLoNeIT https://github.com/aLoNeIT/flyUI avalon.extendComponent = function (sComName, sComParentName, sSettings) { oDefaults = sSettings.defaults; sTemplate = sSettings.template; var oParent = avalon.components[sComParentName]; if (!oParent) return; //不存在組件則直接退出 sTemplate = sTemplate || null; oDefaults.$parents = {}; avalon.each(oParent.defaults, function (key, value) { oDefaults.$parents[sComParentName + "_" + key] = value; }); oDefaults.inherited = function (sPropertyName, sParentName, oParams) { if (avalon.isString(sPropertyName) && avalon.isString(sParentName) && this.$parents[sParentName + "_" + sPropertyName]) return this.$parents[sParentName + "_" + sPropertyName]; else return null; } var oConfig = { //子組件配置項(xiàng) displayName: sComName, parentName: sComParentName, defaults: oDefaults }; if (sTemplate) oConfig.template = sTemplate; oParent.extend(oConfig); };IE8一下 直接使用兼容過(guò)的JSON.stringfy 處理 avalon對(duì)象上的數(shù)據(jù)可能會(huì)返回 undefined
自定義如下擴(kuò)展方法去除掉avalon自身對(duì)象屬性
// avalon getOriginObject // 去除avalon對(duì)象上原型鏈方法 用于解決IE8 json stringfy 對(duì)象數(shù)據(jù)時(shí)異常 avalon.getOriginObject = function(data){ var tempObj = {}; for(var i in data) { if(data.hasOwnProperty(i)){ tempObj[i] = data[i]; } } return tempObj; }component 中模板只支持最外層一個(gè)html閉合結(jié)構(gòu) 同級(jí)多個(gè)無(wú)法渲染
其實(shí)這個(gè)問(wèn)題參考 VUE2.0 也要求組件模板最外層只有一個(gè)頂級(jí)標(biāo)簽
// OK avalon.component("ms-process-quick", { template: "" }) // 第二個(gè)div不會(huì)渲染 avalon.component("ms-process-quick", { template: "" })for循環(huán)的模板中 外層有:class 內(nèi)部判斷時(shí) 循環(huán)內(nèi)部的if會(huì)出現(xiàn)重復(fù)渲染(非必先,排除法才找到問(wèn)題沖突點(diǎn))
如下面的代碼,外層class存在判斷:class="@item.setGreyWhenBankInMaintence ? "" : "test"",造成儲(chǔ)蓄卡 信用卡 重復(fù)渲染兩次。
"
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/83694.html
摘要:現(xiàn)在微軟終于痛定思痛決定放棄了不支持的安全更新,對(duì)我們前端來(lái)說(shuō),真的是重大利好啊言歸正傳,這篇文章的目的就是把怎么用構(gòu)建一個(gè)單頁(yè)面程序介紹以下,是對(duì)自己的一個(gè)總結(jié),也喜歡對(duì)大家有一定的借鑒作用,寫(xiě)的不好不對(duì)的地方希望大家多評(píng)論評(píng)論謝謝。 這篇文章是寫(xiě)在公司項(xiàng)目結(jié)束之后的,因?yàn)槲覀€(gè)人不太會(huì)把沒(méi)有實(shí)踐過(guò)的東西寫(xiě)出來(lái),實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)么,用的怎么樣,好不好用,在成熟實(shí)踐過(guò)的項(xiàng)目上能體...
摘要:使用前端框架開(kāi)發(fā)信息管理系統(tǒng)有三年了,最近半年花了些心血將這三年的積累凝聚起來(lái),誕生了兩個(gè)開(kāi)源項(xiàng)目和。,中文名安逸,是基于的端組件庫(kù)。有用于數(shù)據(jù)展示的組件用于數(shù)據(jù)提交的組件用于消息提示的與組件組件和用戶輸入組件等,并且還在不斷完善中。 使用 Avalon 前端框架開(kāi)發(fā)信息管理系統(tǒng)有三年了,最近半年花了些心血將這三年的積累凝聚起來(lái),誕生了兩個(gè)開(kāi)源項(xiàng)目 ms-bus 和 ane。 ms-b...
摘要:相關(guān)組件版本最近,在公司的項(xiàng)目中,要開(kāi)發(fā)一個(gè)使用瀑布流的前臺(tái),衡量了各種解決方案后,還是覺(jué)得最成熟,所以就選用了它。測(cè)試的結(jié)果很令人沮喪,依然沒(méi)有控制節(jié)點(diǎn)的位置,所以應(yīng)該不是這個(gè)問(wèn)題。 相關(guān)組件版本:avalon 1.3.6、masonry 3.1.5 最近,在公司的項(xiàng)目中,要開(kāi)發(fā)一個(gè)使用瀑布流的前臺(tái),衡量了各種解決方案后,還是覺(jué)得masonry最成熟,所以就選用了它。而在之前開(kāi)發(fā)后臺(tái)...
摘要:前端基礎(chǔ)架構(gòu)和硬核介紹技術(shù)棧的選擇首先我們構(gòu)建前端架構(gòu)需要對(duì)前端生態(tài)圈有一切了解,并且最好帶有一定的技術(shù)前瞻性,好的技術(shù)架構(gòu)可能日后會(huì)方便的擴(kuò)展,減少重構(gòu)的次數(shù),即使重構(gòu)也不需要大動(dòng)干戈,我通常選型技術(shù)棧會(huì)參考以下三點(diǎn)一提出自身業(yè)務(wù)的需求是 # 前端基礎(chǔ)架構(gòu)和硬核介紹 showImg(https://segmentfault.com/img/remote/146000001626972...
摘要:前端基礎(chǔ)架構(gòu)和硬核介紹技術(shù)棧的選擇首先我們構(gòu)建前端架構(gòu)需要對(duì)前端生態(tài)圈有一切了解,并且最好帶有一定的技術(shù)前瞻性,好的技術(shù)架構(gòu)可能日后會(huì)方便的擴(kuò)展,減少重構(gòu)的次數(shù),即使重構(gòu)也不需要大動(dòng)干戈,我通常選型技術(shù)棧會(huì)參考以下三點(diǎn)一提出自身業(yè)務(wù)的需求是 # 前端基礎(chǔ)架構(gòu)和硬核介紹 showImg(https://segmentfault.com/img/remote/146000001626972...
閱讀 3134·2021-09-28 09:42
閱讀 3464·2021-09-22 15:21
閱讀 1136·2021-07-29 13:50
閱讀 3589·2019-08-30 15:56
閱讀 3378·2019-08-30 15:54
閱讀 1205·2019-08-30 13:12
閱讀 1188·2019-08-29 17:03
閱讀 1211·2019-08-29 10:59