成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

avalon 項(xiàng)目實(shí)踐記錄

yvonne / 3429人閱讀

摘要:業(yè)務(wù)組件模塊化拆分復(fù)用后整體可維護(hù)性也得到了很大提升。先贊一個(gè)當(dāng)然凡事都有相對(duì)的一面,此篇文字就主要記錄自己在項(xiàng)目過(guò)程中的一些問(wèn)題。

原文地址:http://mtmzorro.github.io/201...

項(xiàng)目背景

需要兼容到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ù)渲染兩次。

"            
  • ", " ", " ", " 儲(chǔ)蓄卡", " 信用卡", " ", "
  • ",
    IE瀏覽器(9、10、11)中 input password 類型在 display none的元素內(nèi),不完全重現(xiàn),盡量考慮規(guī)避 IE瀏覽器(9、10、11)中 在input select 等f(wàn)orm元素上 使用 if 有潛在的 avalon報(bào)錯(cuò)崩潰風(fēng)險(xiǎn),盡量避免

    文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/83694.html

    相關(guān)文章

    • avalon 單頁(yè)面程序 (種子工程)之一 用requirejs引入avalon

      摘要:現(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)目上能體...

      solocoder 評(píng)論0 收藏0
    • 發(fā)布基于 Avalon2 的 UI 組件庫(kù)與 SPA 腳手架

      摘要:使用前端框架開(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...

      Sike 評(píng)論0 收藏0
    • avalon與masonry的結(jié)合

      摘要:相關(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)...

      Kosmos 評(píng)論0 收藏0
    • 《從零構(gòu)建前后分離的web項(xiàng)目》:前端了解過(guò)關(guān)了嗎?

      摘要:前端基礎(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...

      lbool 評(píng)論0 收藏0
    • 《從零構(gòu)建前后分離的web項(xiàng)目》:前端了解過(guò)關(guān)了嗎?

      摘要:前端基礎(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...

      cgspine 評(píng)論0 收藏0

    發(fā)表評(píng)論

    0條評(píng)論

    最新活動(dòng)
    閱讀需要支付1元查看
    <