欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js如何實現(xiàn)設(shè)計模式中的模板方法

 更新時間:2013年07月23日 17:29:54   作者:  
都知道在js中如果定義兩個相同名稱的方法,前一個方法就會被后一個方法覆蓋掉,使用此特點就可以實現(xiàn)模板方法,感興趣的朋友可以了解下本文哈

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

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

復(fù)制代碼 代碼如下:

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("未綁定數(shù)據(jù)");
}
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 = '你確認(rèn)刪除' + length + '條記錄嗎?';
if (length == 1) {
text = '你確認(rèn)刪除該條記錄嗎?';
}
$.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();
}
}

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

$(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();
})

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

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

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

相關(guān)文章

  • jsTree樹控件(基于jQuery, 超強(qiáng)悍)[推薦]

    jsTree樹控件(基于jQuery, 超強(qiáng)悍)[推薦]

    jsTree是基于javascript的一個跨瀏覽器樹控件,功能強(qiáng)大,而且是免費的。
    2009-09-09
  • ES6中Set和Map用法實例詳解

    ES6中Set和Map用法實例詳解

    這篇文章主要介紹了ES6中Set和Map用法,結(jié)合實例形式詳細(xì)分析了ES6中Set和Map的基本功能、原理、使用方法及操作注意事項,需要的朋友可以參考下
    2020-03-03
  • HTML+JavaScript實現(xiàn)掃雷小游戲

    HTML+JavaScript實現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了HTML+JavaScript實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • js實現(xiàn)特定位取反原理及示例

    js實現(xiàn)特定位取反原理及示例

    循環(huán)輸入每組兩個數(shù)hex和n(0<=n<31),hex是一個16進(jìn)制的數(shù)字,我們要做的是將hex的第n位取反,然后以16進(jìn)制的形式輸出對應(yīng)的結(jié)果
    2014-06-06
  • three.js搭建室內(nèi)場景教程

    three.js搭建室內(nèi)場景教程

    這篇文章主要為大家詳細(xì)介紹了three.js搭建室內(nèi)場景教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • bootstrap常用組件之頭部導(dǎo)航實現(xiàn)代碼

    bootstrap常用組件之頭部導(dǎo)航實現(xiàn)代碼

    這篇文章主要介紹了bootstrap常用組件之頭部導(dǎo)航實現(xiàn)代碼,然后對個別常用屬性進(jìn)行了解釋,需要的的朋友參考下吧
    2017-04-04
  • JS正則表達(dá)式驗證密碼強(qiáng)度

    JS正則表達(dá)式驗證密碼強(qiáng)度

    這篇文章主要為大家詳細(xì)介紹了JS正則表達(dá)式驗證密碼強(qiáng)度,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • js實現(xiàn)前端圖片上傳即時預(yù)覽功能

    js實現(xiàn)前端圖片上傳即時預(yù)覽功能

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)前端圖片即時預(yù)覽功能,本地預(yù)覽功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • echarts中tooltip添加點擊事件代碼示例

    echarts中tooltip添加點擊事件代碼示例

    這篇文章主要給大家介紹了關(guān)于echarts中tooltip添加點擊事件的相關(guān)資料,echarts tooltip點擊事件是指當(dāng)用戶點擊圖表中的提示框(tooltip)時觸發(fā)的事件,需要的朋友可以參考下
    2023-07-07
  • js中獲取一個月有多少天數(shù)的方法

    js中獲取一個月有多少天數(shù)的方法

    這篇文章主要介紹了js中獲取一個月有多少天的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論