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

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

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

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

QQ截圖20210906125949

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

QQ截圖20210906151137

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

一、點擊選中或取消選中下拉選項后,回調問題。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

轉載請注明出處:layui多選下拉組件selectM.js 選擇后觸發(fā)事件等問題的解決 - 微構網絡
分享:
合山市| 鲜城| 保亭| 溧阳市| 石景山区| 灌南县| 楚雄市| 鹤壁市| 昂仁县| 集贤县| 天全县| 包头市| 宝清县| 安溪县| 广州市| 蒲江县| 乌恰县| 宁夏| 通江县| 黑龙江省| 历史| 嘉善县| 德阳市| 伊吾县| 涿鹿县| 岳西县| 金门县| 铜梁县| 诏安县| 黄梅县| 湾仔区| 九寨沟县| 鞍山市| 新宁县| 赤峰市| 澎湖县| 株洲县| 永泰县| 东丽区| 东乌珠穆沁旗| 宣威市|