当前位置:编程学习 > JS >>

js模板方法的思路及实现

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

function ListCommon2() {
    var urlAdd;
    var urlAjax;
    var tableid;
    var titleText="&quo
补充:web前端 , JavaScript ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,