h5學習筆記:layui table
最近在做Layui的後臺,發現Layui這個方案也不錯,能夠快速地在後臺直接部署。相比還要配置webpack,Layui jquery體系開箱即用在一些單獨的情況下還是挺不錯的。最近整理一下現在梳理一下Table元件的用法。
一 、Table 元件
Table元件可以採用官方提供的三種方式來獲取資料。官方推薦js一種。這樣定義一個table元件。定義一個id 和lay-filter
<table id="demo" lay-filter="test"></table>
接下來,還要新增js欄位讓資料展示出來。
<script>
layui.use('table' , function(){
var table = layui.table;
//第一個例項
table.render({
elem: '#demo',
height: 315,
url: "{:url('admin/example/read')}", //資料介面
page: true, //開啟分頁
id: 'testReload',//資料搜尋,這個過程會發送後端
cols: [[ //表頭
{type:'checkbox',fixed: true},
{field: 'id', title: 'ID', width:80 , sort: true,fixed: true},
{field: 'name', title: '姓名', width:80},
{field: 'sex', title: '性別', width:80, sort: true,templet:'<div>{{ d.sex==0? "男":"女" }}</div>'},
{field: 'telephone', title: '電話', width:80} ,
{field: 'email', title: '郵件', width: 177},
{field: 'leader' , title: '法人', width: 80},
{field: 'create_time', title: '建立時間', width: 180, sort: true},
{fixed:'right',title:'操作',align:'center',toolbar:'#barDemo'}
]],
});
</script>
二 、定義Table 模版
Tabel元件採用js這個方案的時候,特別在表格需要經常編輯,刪除等常規的操作,layui提供了一個模版操作方式。可以為此新增一個text/html 模版
在每一個欄位列加上一個toolbar的欄位,指定為工具欄,然後將定義的模版關聯起來。
{fixed:'right',title:'操作',align:'center',toolbar:'#barDemo'}
<table id="demo" lay-filter="test"></table>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-xs" lay-event="edit">編輯</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">刪除</a>
</script>
並且需要將text/html 作為一個模版使用。有趣的是,這個模版裡面還需要對編輯操作加上事件處理。例如官方引入提供的lay-event=“edit” 編輯,lay-event =“del” 刪除的含義。
三 、新增Table 元件js互動
有了表格中常規化的操作,編輯,刪除接下來,還要處理這些行為。這個時候,需要使用layui的on方法進行事件監聽。這個監聽會對整個表格監聽。根據事件不同的型別,然後對裡面的行為進行分別處理。
//監聽事件,填寫lay-filter才能排程
table.on('tool(test)', function(obj){
var data = obj.data;
if(obj.event === 'del'){
} else if(obj.event === 'edit'){
}
});
然後根據點選裡面的事情進行編輯,如彈窗,刪除的邏輯等等。
//監聽事件,填寫lay-filter才能排程
table.on('tool(test)', function(obj){
var data = obj.data;
if(obj.event === 'del'){
layer.confirm('真的刪除行麼', function(index){
deleteData([data.id],function(){
obj.del();
layer.close(index);
layer.msg('刪除成功');
})
});
} else if(obj.event === 'edit'){
// layer.alert('編輯行:<br>'+ JSON.stringify(data))
//跳轉
layer.open({
type: 2
,title: '編輯資料'
,content: "{:url('admin/example/edit_view')}"
,area: ['433px', '393px']
,btn: ['確定', '關閉']
,yes: function(index, layero){
var iframeWindow = window['layui-layer-iframe'+ index]
,submitID = 'LAY-user-back-submit'
,submit = layero.find('iframe').contents().find('#'+ submitID);
//監聽提交
iframeWindow.layui.form.on('submit('+ submitID +')', function(data){
var field = data.field; //獲取提交的欄位
//提交 Ajax 成功後,靜態更新表格中的資料
//$.ajax({});
table.reload('LAY-user-front-submit'); //資料重新整理
layer.close(index); //關閉彈層
});
submit.trigger('click');
},
success: function (layero, index) {
// alert(JSON.stringify(data));
//查詢資料傳遞
var body = layer.getChildFrame('body', index);
var iframeWin = window[layero.find('iframe')[0]['name']];
body.find("input[name='name']").val(data.name);
body.find("input[name='sex']").each(function(index,item){
if(index == data.sex)
{
$(this).prop("checked","checked");
}
});
body.find("input[name='telephone']").val(data.telephone);
body.find("input[name='email']").val(data.email);
body.find("input[name='leader']").val(data.leader);
iframeWin.layui.form.render();//渲染才行
}
});
}
});
四 、 Table 中全選
Tabel需要進行批量刪除選中的資料時候,Table元件提供了這個簡單函式。很多時候,後臺刪除的時候需要指定對應id,於是在table選中的過程中提供了checkStatus的方法。然後獲取到data值,再通過遍歷迴圈一次,將選中的id 返回一個數組。
用於傳送給後端刪除使用。
//獲取table選中的ID值
function getSelectIds(){
var checkStatus = table.checkStatus('testReload'),
data = checkStatus.data,
delList=[];
data.forEach(function(n,i){
delList.push(n.id);
});
return delList;
}
五 、 Table 中批量刪除
選擇了對應的ID,有了這個組後,可以傳送後端進行刪除處理。
var $ = layui.$, active = {
batchdel:function(){
//處理批量刪除
var checkData = getSelectIds();
if(checkData.length === 0){
return layer.msg('請選擇資料');
}
layer.confirm('確定刪除嗎?', function(index) {
deleteData(checkData,function(){
table.reload('testReload');
layer.msg('已刪除');
})});
}
}
//搜尋型別
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
//刪除資料
function deleteData(idArr,callback){
$.post("{:url('admin/example/delete')}",{ids:idArr},function(data){
if(data.code == 0)
{
callback();
}else{
layer.msg(data.msg)
}
})
}
六 、 按鈕型別定義
layui 有一個比較有趣的地方,在開始的時候一直看不懂,然後發現layui對按鈕加以一個型別方式,並且這個型別方式可以很巧妙結合一個回撥處理。從下面的程式碼可以看到 對按鈕定義一個button data-type 的型別,這個型別看起來只是一個常規dataset屬性,但藉助了這個可以很巧妙和監聽行為結合在一起。
<div class="demoTable">
<button class="layui-btn" data-type="batchdel" >刪除</button>
<button class="layui-btn" data-type="add">新增</button>
</div>
監聽行為使用,通過jq監聽click時間,並且指明layui-btn這類按鈕。對一些有型別宣告的,可以呼叫call方法去完成一個函式排程。所以在這裡也是設計得很巧妙。
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
七 、 表格中彈窗
layui 裡面提供一個比較好用彈窗功能,這個彈窗元件使用的頻率比較高,可以結合模版頁面使用。使用的時候,先編輯一個表單頁面。當需要從視窗傳遞過去的時候,這個時候就要在success 回撥的時候 通過jq搜尋子視窗的表單進行傳遞數值。
當中也遇到了一些比較坑的地方。例如radio 使用prop,而不是attr 方式對其賦值。
layer.open({
type: 2
,title: '編輯資料'
,content: "{:url('admin/example/edit_view')}"
,area: ['433px', '393px']
,btn: ['確定', '關閉']
,yes: function(index, layero){
var iframeWindow = window['layui-layer-iframe'+ index]
,submitID = 'LAY-user-back-submit'
,submit = layero.find('iframe').contents().find('#'+ submitID);
//監聽提交
iframeWindow.layui.form.on('submit('+ submitID +')', function(data){
var field = data.field; //獲取提交的欄位
table.reload('LAY-user-front-submit'); //資料重新整理
layer.close(index); //關閉彈層
});
submit.trigger('click');
},
success: function (layero, index) {
// alert(JSON.stringify(data));
//查詢資料傳遞
var body = layer.getChildFrame('body', index);
var iframeWin = window[layero.find('iframe')[0]['name']];
body.find("input[name='name']").val(data.name);
body.find("input[name='sex']").each(function(index,item){
if(index == data.sex)
{
$(this).prop("checked","checked");
}
});
body.find("input[name='telephone']").val(data.telephone);
body.find("input[name='email']").val(data.email);
body.find("input[name='leader']").val(data.leader);
iframeWin.layui.form.render();
}
});
製作過程,賦予資料的時候 有一些小坑,需要在新增render。官方文件據說有提及,怪自己沒詳情看。
var body = layer.getChildFrame('body', index);
var iframeWin = window[layero.find('iframe')[0]['name']];
由於這兩句也在社群那裡獲取到,意為獲取iframe 的視窗。總體來講,完成一個table 的元件,需要經過很多js 編輯和 一些邏輯上的模版處理。所以這個流程先將其記錄下來。並用於日後使用。
相關推薦
h5學習筆記:layui table
最近在做Layui的後臺,發現Layui這個方案也不錯,能夠快速地在後臺直接部署。相比還要配置webpack,Layui jquery體系開箱即用在一些單獨的情況下還是挺不錯的。最近整理一下現在梳理一下Table元件的用法。 一 、Table 元件 Tabl
h5 學習筆記:記錄一些前端用到後臺和移動樣式庫
這幾天一直在找一些移動和業務樣式庫,發現了不少不錯的,既是漂亮又符合業務用到。 前端發展真的變化很快,發現市面上還是有不少開源好用的產品。針對後臺研發的,有阿里ant design、阿里通訊的,還有餓了麼,京東,有贊等等一些庫。我比較喜歡ant design裡面
h5學習筆記: css佈局案例練習
今天練習一下css相關的佈局,沒有寫互動內容。在css佈局中,發現也不少不熟悉的地方。只是沒有形成概念,其次對一些用法比較模糊。日後需要加強一下這些。對平衡的兩個div應該如何處理,還要繼續想想辦法。
h5學習筆記:居中
將之前的用到的記錄一下。以便不時之需。朋友一直和我講css 是不簡單,到目前為此,css發展已經進化到越來越驚人。其實學好css 不容易,也沒有人所說的那樣簡單。css2- css3 – 進化less,sass,postcss,似乎真是越來越多。那天看了一下le
h5學習筆記:flex
flex部署可以很方便佈局橫向和垂直縱向的設計。所以在編寫小程式可以放心使用。 flex 依舊有瀏覽器相容性的問題。但是ie 8 這種瀏覽器真不管太多了。 今晚做一個練習,記錄一下之前工作中用到用法。flex是一種常用佈局方式,使用這種方式處理一些佈局。
h5學習筆記:使用fis的前端構建工具記錄
這幾天練習一下webpack ,glup的工具使用,發現webpack 配置起來並不是太順利,總是有一種抗拒的,但從vuejs 和react 需要這種配套的方案去解決打包和釋出版本問題。這也是需要挖一下坑,把這塊骨頭啃下來。 無意中找到了fis百度的前端構建工
h5學習筆記:vue 路由部署伺服器子目錄問題
《Egret 引擎入門》 這兩天一直在查詢vue經過打包後部署伺服器一直顯示不出來的問題。前端沒有報錯,資源載入也很正常。找了很多回答,最後定位在vue的訪問路由出了問題。 出現的現象 前端vuejs+vue-router+webpack的組合,打包是由w
h5學習筆記:UI庫
自從接觸了web開發以來,每天都會很糾結選什麼UI框架才是比較合適?擺在這個問題面前是一個技術的選型。要想知道,web開發的坑實在太深。不斷地大廠推出開源框架,不斷地發現很多造輪子。或者看到一個比較漂亮就會選。 最近我深刻體會到這種矛盾的存在,前段時間一直用j
h5學習筆記:http-server小工具
今天下午遇到一個小問題,下載的專案放置XAMPP二級目錄裡面,資源都會發生錯誤的情況,這個時候為了解決這個辦法,使用了fis3的內建伺服器去處理。 使用fis3伺服器也是挺方便的。 使用fis3的指令碼首先啟動伺服器,然後將檔案釋出到內建的伺服器。 fis
h5學習筆記: 下拉選單
滑鼠經過選單的時候,下拉選單形成起來。這個案例中,有一些比較有趣的事情。 首先要了解這種選單設計結構。我們知道ul+li經常組合列表,這種列表既有縱向,也有橫向。列表中的li元素,再包一個ul+li的組合元素。這樣一個列表下拉選單結構就變得很清晰了。
h5學習筆記 Table
編寫一個表格作為練習。當中有個比較重要的樣式在學習過程中遇到,border-collapse: collapse; 能夠去除雙重的邊框。table可以合併單元格所以 對td屬性設定 colspan=”2” 則代表可以設定單元格。table 當中thead, tbody
Guava學習筆記:Guava新集合-Table等
Table 當我們需要多個索引的資料結構的時候,通常情況下,我們只能用這種醜陋的Map<FirstName, Map<LastName, Person>>來實現。為此Guava提供了一個新的集合型別-Table集合型別,來支援這種資料結構的使用場景。Table支援“row”和“
Linux學習筆記:存儲管理
linux 磁盤管理 Linux系統中所有的硬件設備都是通過文件的方式來表現和使用的,我們將這些文件稱為設備文件,在Linux下的/dev目錄中有大量的設備文件,根據設備文件的不同,又分為字符設備文件和塊設備文件。字符設備文件的存取是以字符流的方式來進行的,一次傳送一個字符。常見的有打印
學習筆記:javascript內置對象:數組對象
b- sort splice 刪除 分隔 href 結果 join() strong 1.數組對象的創建 1.設置一個長度為0的數組 var myarr=new array(); 2.設置一個長度為n的數組 var myarr=new arr(n); 3.聲明一個
學習筆記:javascript內置對象:日期對象
etsec sel mil cond ava com 描述 學習筆記 asp 2.日期對象的常用函數 2.日期對象的常用函數 Date 對象方法 方法描述 Date() 返回當日的日期和時間。 getDate() 從 Date 對象返回一個月
Linux學習筆記:btrfs
可擴展性 linux btrfs Technical Preview, 技術預覽版 BtrFS(B-tree文件系統,又稱為Butter FS或Better FS),2007由oracle開源後,得到了IBM、intel等廠商的大力支持,其目標計劃是替代linux目前的ext3/4,成為下
Linux學習筆記:rpm程序包管理
源代碼 rpm 程序包 以CentOS為例,rpm程序包管理器的相關內容如下:CentOS的程序包管理器: 程序包的命名規則: 源代碼包: software_name-VERSION.tar.gz VERSION:major.mino
kafka學習筆記:知識點整理
一個 eight true med 分組 pos 間接 fig ges 一、為什麽需要消息系統 1.解耦: 允許你獨立的擴展或修改兩邊的處理過程,只要確保它們遵守同樣的接口約束。 2.冗余: 消息隊列把數據進行持久化直到它們已經被完全處理,通過這一方式規避了數據
Emacs學習筆記:移動
size exp http spc ssi 參考 put kill ati 參考網址:https://www.emacswiki.org/emacs/NavigatingParentheses Navigating over balanced expressions C
Linux學習筆記:OSI七層模型
路由器 交換機 比特流 兼容性 linux OSI七層模型: OSI(Open System Interconnection,開放系統互連)七層網絡模型稱為開放式系統互聯參考模型 ,是一個邏輯上的定義,一個規範,它把網絡從邏輯上分為了7層。每一層都有相關、相對應的物理設備,比如路由器