2024国产成人精品免费视频|日本免费一区二区三区毛片|久久97超碰色中文字幕|亚洲天堂a中文字幕

layui多選下拉組件selectM.js 選擇后觸發(fā)事件等問題的解決

2021-09-06 15:39 欄目:技術(shù)開發(fā) 查看(9679)

最近做了一個簡單項目,后臺用layui快速構(gòu)建前端,其中有一個分類多選的場景。也就是一級分類和二級分類多可以多選,基本業(yè)務(wù)流程是:用戶可以選擇一個或多個一級分類,沒選擇分類后,系統(tǒng)請求對應(yīng)的二級分類數(shù)據(jù),重新在前臺渲染二級分類的數(shù)據(jù)。

QQ截圖20210906125949

其實在以前的項目,使用過其他的庫實現(xiàn)這樣的流程。但是因為這個使用layui,而筆者本人對代碼是有強迫癥的,盡量減少重復(fù)的東西。所以盡量直接用layui來實現(xiàn),但通過查看手冊和看它代碼,并沒有直接提供這一功能。然后在layui官網(wǎng)搜索第三方庫,發(fā)現(xiàn)了幾個,其中有一個叫做selectM.js的相對來說比較簡單,剛好符合這個場景,而且默認(rèn)ui風(fēng)格完全跟layui保持一致;只有不到10kb。下面是作者提供的參數(shù)文檔:

QQ截圖20210906151137

看上去貌似使用起來沒什么問題,但是實際上使用的時候還是發(fā)現(xiàn)了一些小“坑”,這里分享一下供大家參考,可能有更加優(yōu)雅的方式完成,主要是兩個問題:

一、點擊選中或取消選中下拉選項后,回調(diào)問題。

文檔中提供了一個filter的配置參數(shù),里面也說明了的作用跟layui的lay-filter一致,也就是綁定一個觸發(fā)的事件函數(shù)。然而實際上并沒有效果,閱讀其源代碼發(fā)現(xiàn)并沒有這個參數(shù)出現(xiàn)。不清楚是作者是不是上傳錯代碼版本了;或者可能是作者先寫好了文檔,開始是想做完整多級多選聯(lián)動選擇的邏輯的,后面可能太忙沒做完;里面似乎也沒有這個回調(diào)。解決辦法是:在setSelected方法的最后,添加回調(diào)代碼邏輯,如:

if(typeof this.config.callback=='function'){this.config.callback(values)};

然后在調(diào)用的時候,添加callback參數(shù)進(jìn)行回調(diào),回調(diào)的值其實就是源碼中的values,values就包括當(dāng)前選擇的選項等數(shù)據(jù)信息。調(diào)用代碼如下:

var catid = selectM({
    elem: '#catid'
   ,data: d.data
   ,max:6
   ,width:400
   ,verify:'required'
   ,callback:function (values) {
      /*回調(diào)邏輯*/
  }
});

這樣就可以實現(xiàn)選擇或取消選擇選項后,進(jìn)行回調(diào),重新加載新的二級分類數(shù)據(jù)了。然而這個時候又發(fā)現(xiàn)了兩個一個問題,下面將會分析這個問題。

二、庫本身僅提供了初始化已選選項的API,但沒有提供下拉框所有數(shù)據(jù)重載。

雖然文檔表格中沒有體現(xiàn),但通過其源代碼可以看到實際上提供了一個obj.set的方法,用于初始化已選選項,這個可以用于在編輯內(nèi)容的時候,默認(rèn)勾選上次保存的選項信息。然而,重新渲染二級下拉框數(shù)據(jù)的方法貌似并沒有提供。于是手寫網(wǎng)絡(luò)請求代碼實現(xiàn),但是出現(xiàn)一個問題,就是偶次數(shù)渲染的時候,二級分類下拉框點擊沒有任何反應(yīng)。

期間嘗試過多種方式,包括粗暴地修改源碼中的$E.on方法里面的邏輯,事實也是可以的,然而既然都用了庫了,做這么大的改動就有點本末倒置了。所以用了一種相對來說更加優(yōu)雅一點的方式,首先在二級分類實例化本庫前定義一個全局變量比如catid2,然后在實例化前做判斷,如果catid2已經(jīng)實例化存在一個對象,則進(jìn)行重載。

/*全局變量*/
var catid2='';
/*如果已經(jīng)存在,也就是重載數(shù)據(jù)的時候會執(zhí)行這段代碼,重載數(shù)據(jù)。
其中render可以參考庫的源代碼,其實更layui一樣的;
在使用layui的很多時候也需要用render重載數(shù)據(jù)。*/
if(catid2) catid2.render();
/*開始創(chuàng)建實例*/
catid2 = selectM({ 
    elem: '#catid2' 
    ,data: d.data 
    ,max:6 
    ,width:400 
    ,verify:'required' 
    ,callback:function (values) { 
       /*回調(diào)邏輯*/ 
    } 
});

這樣基本就可以解決數(shù)據(jù)重載問題。

至此,可以用selectM.js 完整實現(xiàn)該場景的所有功能。

與我們的項目經(jīng)理聯(lián)系
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流

轉(zhuǎn)載請注明出處:layui多選下拉組件selectM.js 選擇后觸發(fā)事件等問題的解決 - 微構(gòu)網(wǎng)絡(luò)
分享:
阳春市| 新和县| 巴里| 睢宁县| 吴桥县| 勐海县| 临安市| 博客| 常宁市| 沭阳县| 大埔区| 漾濞| 太和县| 石渠县| 札达县| 和政县| 车险| 曲阳县| 山阴县| 德清县| 抚顺县| 墨江| 兴仁县| 普格县| 台中市| 舞阳县| 苏尼特右旗| 涿鹿县| 柳州市| 泾源县| 呼玛县| 广南县| 呼图壁县| 郎溪县| 都安| 鸡西市| 革吉县| 海安县| 阳谷县| 青川县| 海南省|