進入主題之前先說一段我學習bootstrap的歷程:因客戶需要,公司需要把系統的某個模塊從系統中獨立出來,並且這個任務由我負責,這樣一來這個新做的(小)系統應該不太復雜,而恰好我最近對bootstrap有那么一點了解(去官網看了下,很高大上),所以我就用了(因為之前的系統使用jQuery-easyUI,我覺得它性能比較差)bootstrap。不過,做了一周后我發現,bootstrap滿足不了我的需求,它更適合普通的網頁,easyUI中有的好多控件都沒有,比如:表單的異步提交、confirm彈出框、alert彈出框等等。雖然這樣,我還是繼續用了下去,因為它做出來的頁面比較“高大上”,哈哈。最后,我又加入了jqueryUI的許多控件才終於完成了任務。
最后,說一下我對easyUI和bootstrap的理解,如果有不對的地方,還請大家指出來。對於easyUI,我用的時間加在一起應該有差不多2年的時間,我覺得它的特點就是功能強大,操作簡單,企業項目中用到的所有控件幾乎都有,這一點很強大。不過,對於它的性能確實不太好,我在IE8和更低版本中用過,頁面加載慢,特別是數據量多的,一個頁面出來要好幾秒鍾的時間,我記得我們還花了好長時間來做這一塊的優化。而對於bootstrap,我這個初學者對使用過它之后的感受是做的頁面漂亮,更適合應用在普通的網頁上。當然,我在瀏覽網頁時也看到一些水友說可以將easyUI與bootstrap結合起來使用,我感覺這也許是一個不錯的選擇,呵呵。
一、表格
$(function(){ /*$.ajaxSetup({ async: false });*/ //1.初始化Table var oTable = new TableInit(); oTable.Init(); //2.初始化Button的點擊事件 var oButtonInit = new ButtonInit(); oButtonInit.Init(); }); var TableInit = function(){ var oTableInit = new Object(); //初始化Table oTableInit.Init = function(){ $('#tb_data').bootstrapTable({ url: '/publish/getProjectList', //請求后台的URL(*) method: 'get', //請求方式(*) dataType: 'json', toolbar: '#toolbar', //工具按鈕用哪個容器 striped: false, //是否顯示行間隔色 cache: false, //是否使用緩存,默認為true,所以一般情況下需要設置一下這個屬性(*) pagination: true, //是否顯示分頁(*) showPaginationSwitch: false, //是否顯示分頁數 sortable: false, //是否啟用排序 sortOrder: "asc", //排序方式 queryParams: oTableInit.queryParams, //傳遞參數(*) queryParamsType: '', //如果要在oTableInit.queryParams方法獲取pageNumber和pageSize的值,需要將此值設置為空字符串(*) sidePagination: 'server', //分頁方式:client客戶端分頁,server服務端分頁(*) pageNumber: 1, //初始化加載第一頁,默認第一頁 pageSize: 10, //每頁的記錄行數(*) pageList: [10, 20, 30], //可供選擇的每頁的行數(*) search: false, //是否顯示表格搜索,此搜索是客戶端搜索,不會進服務端,所以,個人感覺意義不大 strictSearch: true, showColumns: true, //是否顯示所有的列 showRefresh: true, //是否顯示刷新按鈕 minimumCountColumns: 2, //最少允許的列數 clickToSelect: true, //是否啟用點擊選中行 singleSelect: true, height: $(window).height()-140, //行高,如果沒有設置height屬性,表格自動根據記錄條數覺得表格高度 uniqueId: "ID", //每一行的唯一標識,一般為主鍵列 showToggle: true, //是否顯示詳細視圖和列表視圖的切換按鈕 cardView: false, //是否顯示詳細視圖 detailView: false, //是否顯示父子表 paginationPreText: "上一頁", paginationNextText: "下一頁", columns: [{ checkbox:true }, { field: 'index', width: 35, formatter : function(value, row, index) { // 在源代碼中加入getPage方法 var page = $('#tb_data').bootstrapTable("getPage"); return page.pageSize * (page.pageNumber - 1) + index + 1; } }, { field: 'id', title: '任務ID', align: 'center' }, { field: 'description', title: '描述', align: 'center' }, { field: 'statusName', title: '狀態', align: 'center' }, { field: 'releaseDate', title: '發布時間', align: 'center' }, { field: 'gmtCreate', title: '創建時間', align: 'center' }, { field: 'creatorCn', title: '創建人', align: 'center' }, { field: 'releaseTime', // title: '發布日期', visible: false }, { field: 'descriptionCheck', // title: '描述類型', visible: false }], onDblClickRow:function(row, $element){ var url = '/publish/intoProjectInfoPage?projectId='+row.id; window.open(url); }, onClickRow:function(row, $element, field){ if(row.statusName!='待審核' && row.statusName!='准備提測'){ $('#deleteBtn').prop("disabled", true); }else{ $('#deleteBtn').prop("disabled", false); } } }); }; //得到查詢的參數 oTableInit.queryParams = function(params) {
// 特別說明:
// 如果queryParamsType=limit,params包含{limit, offset, search, sort, order}
// 如果queryParamsType!=limit,params包含{pageSize, pageNumber, searchText, sortName, sortOrder}
var temp = { //這里的鍵的名字和控制器的變量名必須一直,這邊改動,控制器也需要改成一樣的 pageSize: params.pageSize, //頁面大小 pageNumber: params.pageNumber //頁碼 }; return temp; }; return oTableInit; }; var ButtonInit = function () { var oInit = new Object(); oInit.Init = function () { //初始化頁面上面的按鈕事件 $('#saveProjectBtn').click(function(){ }); $('#addBtn').click(function(){ }); // 編輯任務按鈕點擊事件 $('#editBtn').click(function(){ }); // 刪除任務按鈕點擊事件 $('#deleteBtn').click(function(){ var arr = $('#tb_data').bootstrapTable('getSelections'); if(arr.length>0){ confirmMessage('確定刪除此任務嗎?', deleteTask); }else{ alertMessage("請選擇一條數據"); } });
};
return oInit;
};
