亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js如何實現設計模式中的模板方法

2019-11-20 22:29:53
字體:
來源:轉載
供稿:網友

在js中如何實現設計模式中的模板方法?
思路的產生必然要求熟悉js,如何實現?就很簡單了,都知道在js中如果定義兩個相同名稱的方法,前一個方法就會被后一個方法覆蓋掉,使用此特點就可以實現模板方法。

例如在實際的項目中有很多頁面操作的步驟基本相同,但局部細節卻不一樣。例如在我所在的項目中,就有很多展示數據庫記錄的頁面,每個頁面都存在讀取記錄,查詢記錄,增加刪除,修改記錄等相同的操作,但對應的后臺方法卻不一樣。

復制代碼 代碼如下:

function ListCommon2() {
var urlAdd;
var urlAjax;
var tableid;
var titleText="";
var winid = "#win";
var columns;
var toolbars;
var queryParams;
var colkey;
var toolbarsType
this.initList = function (aurlAdd, aurlAjax, atableid, atitleText, awinid, acolumns, atoolbarsType) {
urlAdd = aurlAdd;
urlAjax = aurlAjax;
if (atableid) {
tableid = atableid;
}
if (atitleText) {
titleText = atitleText;
}
if (atitleText) {
winid = awinid;
}
columns = acolumns;
toolbarsType = atoolbarsType;
};
this.initData = function () {
if (!toolbarsType) {
toolbars = [{ text: '添加', iconCls: 'icon-add', handler: Add }, '-', { text: '編輯', iconCls: 'icon-edit', handler: this.Edit }
, '-', { text: '刪除', iconCls: 'icon-cancel', handler: this.delMsg }
];
} else {
toolbars = toolbarsType;
}
queryParams = this.GetqueryParams();
$(tableid).datagrid({
url: urlAjax + '?OperationType=list',
columns: columns,
toolbar: toolbars,
idField: colkey,
pagination: true,
pageSize: 20,
sortName: colkey,
sortOrder: 'desc',
rownumbers: true, fitColumns: true,
striped: true,
method: "post",
striped: true,
queryParams: this.GetqueryParams(),
showFooter: true
, pageList: [10, 20, 30, 40, 50]
});
$("#add").click(function (e) {
Add();
})
$("#edit").bind('click', { obj: this }, function (event) {
event.data.obj. Edit();
})
$("#del").bind('click', { obj: this }, function (event) {
event.data.obj.delMsg();
})
$("#btnQuery").bind('click', { obj: this }, function (event) {
var queryParamsnew = event.data.obj.GetqueryParams();
$(tableid).datagrid('load', queryParamsnew)
})
}
this.GetqueryParams = function () {
var NameList = this.Getcolsinfo();
var otherQueryParams = this.GetOtherQueryParams();
if (!otherQueryParams) {
return { colkey: colkey, colsinfo: NameList }
}
else {
return otherQueryParams;
}
}
this.GetOtherQueryParams = function () {
return null;
}
this.Getcolsinfo = function () {
var fieldNameList = [];
if (columns.length > 0) {
for (var i = 0; i < columns[0].length; i++) {
fieldNameList.push(columns[0][i].field);
}
}
else {
alert("未綁定數據");
}
colkey = fieldNameList[fieldNameList.length-1];
var NameList = fieldNameList.join(",");
return NameList
}
function Add() {
var _content = '<iframe id="FRMdetail" frameborder="0" src=' + urlAdd + ' style="width:100%;height:100%;" ></iframe>';
$(winid).dialog({
width: 600,
height: 400,
modal: true,
content: _content,
title: "增加" + titleText,
draggable: true,
resizable: true,
shadow: true,
minimizable: false
});
}
this.Edit = function (editId) {
var id; var obj = typeof (editId);
if (!editId || obj == "object") {
var items = $(tableid).datagrid('getSelections');
var length = items.length;
if (length == 0) {
$.messager.alert('提示', '請選擇一條記錄然后編輯');
return;
} else if (length > 1) {
$.messager.alert('提示', '由于一次只能編輯一條記錄,所以只能修改第一條記錄');
return;
}
id = GetId(items[0]);
}
else {
id = editId;
}
var _content = '<iframe id="FRMdetail" frameborder="0" src=' + urlAdd + '?Id=' + id + ' style="width:100%;height:100%;" ></iframe>';
$(winid).dialog({
width: 600,
height: 400,
modal: true,
content: _content,
title: "修改" + titleText,
draggable: true,
resizable: true,
shadow: true,
minimizable: false
});
}
this.windowclose = function () {
$(winid).window('close');
}
this.SaveOkCallback = function () {
this.windowclose();
$(tableid).datagrid('reload');
$(tableid).datagrid('unselectAll');
}
this.delMsg = function (delId) {
var length = 1;
var id;
var items; var obj = typeof (delId);
if (!delId || obj == "object") {
items = $(tableid).datagrid('getSelections');
length = items.length;
if (length == 0) {
$.messager.alert('提示', '請至少選擇一條記錄然后刪除');
return;
}
}
else {
id = delId;
}
var text = '你確認刪除' + length + '條記錄嗎?';
if (length == 1) {
text = '你確認刪除該條記錄嗎?';
}
$.messager.confirm('提示', text, function (r) {
if (r) {
if (!delId) {
var idList = [];
$.each(items,
function (key, value) {
var id = GetId(value); // in case we're changing the key
idList.push(id);
});
id = idList.join(",");
}
del(id)
}
});
}
function del(id) {
$.ajax({ type: "post",
url: urlAjax + "?OperationType=del&id=" + id,
success: function (msg) {
var obj = jQuery.parseJSON(msg);
if (obj.IsSuccess == true) {
$.messager.alert('提示', obj.Msg);
selectcallback();
}
else {
$.messager.alert('提示', obj.Msg);
}
}
});
}
function selectcallback() {
SaveOkCallback();
}
}

仔細看看就會發現,這段代碼就包含了,查詢,修改,添加,刪除等幾乎所有的操作,但由于查詢條件傳遞的參數不同,所以有一個需要重寫的方法this.GetOtherQueryParams
根據不同的頁面重寫就可以了。
例如如下一個頁面的重寫:
復制代碼 代碼如下:

$(document).ready(function () {
obj = new ListCommon2();
obj.initList(urlAdd, urlAjax, tableid, titleText, winid, columns, '#tb');
obj.GetOtherQueryParams = function () {
var colsinfo = obj.Getcolsinfo();
return { colsinfo: colsinfo, SWV_Performance_fk: $('#SWV_Performance_fk').combobox('getValue'), S_NAME: $("#S_NAME").val(), SQ_NAME: $("#SQ_NAME").val() };
}
obj.initData();
})

當然也可以不定義方法,此處只調用,例如GetId(items[0]);在此處就沒有定義,在具體的頁面在具體定義
復制代碼 代碼如下:

<script type="text/javascript">
function GetId(item) {
return item.SWV_ID
}
</script>

都可以達到同樣的效果。還有一種就是傳遞一個函數。具體哪種方式最合適,個人認為還是使用模板方法最好。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕免费看| 日韩av网站大全| 日韩高清欧美高清| 日本欧美一二三区| 国产精品高潮呻吟久久av野狼| 夜夜嗨av一区二区三区四区| 欧美精品一本久久男人的天堂| 久久琪琪电影院| 91久久精品国产91性色| 欧美成人国产va精品日本一级| 亚洲第一天堂av| 欧美在线视频一区| 久久人人爽人人爽人人片av高清| 国产综合色香蕉精品| 精品久久久久久久久久久久| 久久综合免费视频影院| 欧美日韩加勒比精品一区| 国产精品免费观看在线| 久久成人18免费网站| 国产成人av网| 成人欧美一区二区三区在线湿哒哒| 国产精品欧美风情| 欧美国产日韩中文字幕在线| 国产亚洲aⅴaaaaaa毛片| 国产精品ⅴa在线观看h| 国产精品入口福利| 国产成人精品一区二区| 亚洲专区在线视频| 国产精品免费久久久久久| 91情侣偷在线精品国产| 欧美色道久久88综合亚洲精品| 秋霞午夜一区二区| 96精品视频在线| 欧美成人精品在线| 亚洲第一二三四五区| 国产精品日韩在线观看| 亚洲精品乱码久久久久久按摩观| 欧美日韩精品在线播放| 成人午夜在线视频一区| 97精品欧美一区二区三区| 91青草视频久久| 欧美激情免费在线| 日本久久久a级免费| 欧洲成人在线观看| 欧美日韩一区二区三区在线免费观看| 成人黄色在线免费| 国产精品88a∨| 亚洲国产日韩欧美综合久久| 久久99久国产精品黄毛片入口| 成人精品在线观看| 91在线色戒在线| 亚洲第一页中文字幕| 亚洲九九九在线观看| 欧美激情一区二区三区在线视频观看| 欧美乱大交做爰xxxⅹ性3| 欧美亚洲午夜视频在线观看| 日韩毛片在线观看| 成人欧美一区二区三区黑人孕妇| 欧美激情精品久久久久久蜜臀| 亚洲国产欧美一区| 日韩精品在线第一页| 日韩精品欧美国产精品忘忧草| 亚洲视频一区二区三区| 亚洲国产精久久久久久久| 精品毛片网大全| 成人免费视频xnxx.com| 色偷偷av一区二区三区| 国产在线视频2019最新视频| 日韩久久午夜影院| 在线看福利67194| 97久久伊人激情网| 日韩中文视频免费在线观看| 日韩高清欧美高清| 日韩在线中文视频| 国产精品美女主播在线观看纯欲| 88国产精品欧美一区二区三区| 91九色在线视频| 国产一区二区三区在线| 91在线视频导航| 日韩av片电影专区| 久久成人免费视频| 久久亚洲精品成人| 国产免费一区二区三区在线能观看| 日韩中文字幕欧美| 亚洲国产精品99久久| 午夜免费日韩视频| 亚洲精品一区中文字幕乱码| 亚洲天堂男人天堂| 色婷婷av一区二区三区在线观看| 欧美贵妇videos办公室| 国产精品亚洲美女av网站| 欧美成人国产va精品日本一级| 国产午夜精品视频免费不卡69堂| 最新国产成人av网站网址麻豆| 亚洲精品国产综合区久久久久久久| 亚洲免费视频观看| 亚洲综合中文字幕68页| 欧美成年人视频网站欧美| 一区二区三区视频免费在线观看| 亚洲第一精品福利| 久久99热精品这里久久精品| 美日韩精品视频免费看| 少妇激情综合网| 最近2019中文字幕大全第二页| 亚洲午夜未满十八勿入免费观看全集| 一区二区在线视频| 久久久av网站| 国产成人亚洲精品| 久久精彩免费视频| 51久久精品夜色国产麻豆| 欧美一区亚洲一区| 77777少妇光屁股久久一区| 欧美精品一区二区三区国产精品| 欧美激情一区二区三区成人| 97香蕉久久超级碰碰高清版| 午夜精品久久久久久久久久久久久| 午夜精品久久久久久久99黑人| 精品欧美aⅴ在线网站| 欧美日韩国产一中文字不卡| 亚洲天堂av在线播放| 欧美肥老太性生活视频| 亚洲视频免费一区| 亚洲第一福利网| 欧美日韩国产精品一区二区三区四区| 国产精品96久久久久久又黄又硬| 九九热这里只有精品免费看| 久久夜精品va视频免费观看| 久久国产精品99国产精| 亚洲视频视频在线| 高清亚洲成在人网站天堂| 久久精品一偷一偷国产| 俺去亚洲欧洲欧美日韩| 亚洲视频视频在线| 日韩性生活视频| 亚洲国产精品专区久久| 亚洲国产精品久久久久秋霞蜜臀| 久久午夜a级毛片| 欧美激情中文字幕乱码免费| 日韩精品高清在线| 一区二区中文字幕| 国产精品白丝av嫩草影院| 日韩一级裸体免费视频| 狠狠久久亚洲欧美专区| 欧美激情图片区| 欧美中文字幕视频在线观看| 欧美日韩国产精品一区二区不卡中文| 欧美日韩免费网站| 精品视频久久久久久| 亚洲在线www| 色琪琪综合男人的天堂aⅴ视频| 亚洲无亚洲人成网站77777| 午夜精品蜜臀一区二区三区免费| 国产精品国语对白| 亚洲欧美国产高清va在线播| 国产精彩精品视频| 国内精品久久久久久| 日韩av在线电影网| 久久av在线看| 亚洲欧美国产精品久久久久久久| 韩剧1988在线观看免费完整版| 中文字幕亚洲无线码在线一区| 欧美午夜电影在线| 色婷婷久久一区二区| 色噜噜狠狠色综合网图区|