zoukankan      html  css  js  c++  java
  • 一个MVVM前端扩展器

    /* 异步请求结果返回状态码 */
    var ResultStatus = { OK: 100, Failed: 101, NotLogin: 102, Unauthorized: 103 };
    
    String.formatDate = function (format) {
        return formatDate(this, format);
    }
    
    function formatDate(date, format) {
        if (!date || !format)
            return "";
    
        if (date.constructor == String) {
            date = date.replace(/-/g, "/").replace("T", " ");//IE11里面不能直接转换带"-",必须先替换成"/",如果有T也要替换,不然 2018/1/1T10:10 这种格式会有问题
            date = new Date(date);
        }
    
        if (date.constructor == Date) {
            return date.format(format);
        }
    
        return date;
    }
    
    Date.prototype.format = function (format) {
        var o =
            {
                "M+": this.getMonth() + 1, //month
                "d+": this.getDate(),    //day
                "H+": this.getHours(),   //hour
                "m+": this.getMinutes(), //minute
                "s+": this.getSeconds(), //second
                "q+": Math.floor((this.getMonth() + 3) / 3),  //quarter
                "S": this.getMilliseconds() //millisecond
            };
        if (/(y+)/.test(format))
            format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o)
            if (new RegExp("(" + k + ")").test(format))
                format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
        return format;
    };
    Array.prototype.where = function (predicate) {
        var arr = this;
        var retArr = [];
        for (var i = 0; i < arr.length; i++) {
            var item = arr[i];
            if (predicate(item)) {
                retArr.push(item);
            }
        }
        return retArr;
    };
    Array.prototype.select = function (selector) {
        var arr = this;
        var retArr = [];
        for (var i = 0; i < arr.length; i++) {
            var item = arr[i];
            retArr.push(selector(item));
        }
        return retArr;
    };
    Array.prototype.first = function (predicate) {
        var arr = this;
        for (var i = 0; i < arr.length; i++) {
            var item = arr[i];
            if (predicate(item)) {
                return item;
            }
        }
        return null;
    };
    Array.prototype.any = function (predicate) {
        var arr = this;
        var retArr = [];
        for (var i = 0; i < arr.length; i++) {
            var item = arr[i];
            if (predicate(item)) {
                return true;
            }
        }
        return false;
    };
    Array.prototype.pushRange = function (items) {
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            this.push(item);
        }
    };
    Array.prototype.each = function (action) {
        for (var i = 0; i < this.length; i++) {
            var item = this[i];
            action(item);
        }
    };
    Array.prototype.sortBy = function (keySelector, rev) {
        /*
         *此方法返回一个新对象 
         */
        var arr = [];
        for (var i = 0; i < this.length; i++) {
            arr.push(this[i]);
        }
    
        //第二个参数没有传递 默认升序排列
        rev = rev !== undefined && rev !== false;
    
        var compare = function (a, b) {
            a = keySelector(a);
            b = keySelector(b);
    
            if (rev)
                return b - a;
            else
                return a - b;
        }
    
        arr.sort(compare);
        return arr;
    }
    Array.prototype.orderBy = function (keySelector) {
        return this.sortBy(keySelector, false);
    }
    Array.prototype.orderByDesc = function (keySelector) {
        return this.sortBy(keySelector, true);
    }
    Array.prototype.groupBy = function (keySelector) {
        var arr = this;
        var ret = {};
        for (var i = 0; i < arr.length; i++) {
            var item = arr[i];
            var key = keySelector(item);
            var group;
            if (key in ret) {
                group = ret[key];
            }
            else {
                group = [];
                ret[key] = group;
            }
    
            group.push(item);
        }
    
        return ret;
    }
    
    
    
    function newGuid() {
        var guid = "";
        for (var i = 1; i <= 32; i++) {
            var n = Math.floor(Math.random() * 16.0).toString(16);
            guid += n;
            if ((i == 8) || (i == 12) || (i == 16) || (i == 20)) guid += "-";
        }
        return guid;
    };
    
    /* $ace */
    (function ($) {
        var $ace = {};
    
        /* 返回 json 数据 */
        $ace.get = function (url, data, callback) {
            if ($.isFunction(data)) {
                callback = data;
                data = undefined;
            }
    
            url = parseUrl(url);
            var ret = execAjax("GET", url, data, callback);
            return ret;
        }
        $ace.post = function (url, data, callback) {
            if ($.isFunction(data)) {
                callback = data;
                data = undefined;
            }
    
            var ret = execAjax("POST", url, data, callback);
            return ret;
        }
    
        $ace.alert = function (msg, callBack) {
            layerAlert(msg, callBack);
        }
        $ace.confirm = function (msg, callBack) {
            layerConfirm(msg, callBack);
        }
        $ace.msg = function (msg) {
            layerMsg(msg);
        }
        /* 加载提示,不会自动消失,需手动关闭 */
        $ace.load = function (msg) {
            var index = layer.msg(msg || "", {
                icon: 16
                , shade: 0.01
                , time: 1024 * 1000 * 1000 //设置超长等待,最后手动关闭
            });
    
            var loader = {
                close: function () {
                    layer.close(index);
                }
            };
    
            return loader;
        }
    
        $ace.reload = function () {
            location.reload();
            return false;
        }
    
        /* 将当前 url 的参数值 */
        $ace.getQueryParam = function (name) {
            if (name === null || name === undefined || name === "")
                return "";
            name = ("" + name).toLowerCase();
            var search = location.search.slice(1);
            var arr = search.split("&");
            for (var i = 0; i < arr.length; i++) {
                var ar = arr[i].split("=");
                if (ar[0].toLowerCase() == name) {
                    return decodeURIComponent(ar[1]);
                }
            }
            return "";
        }
        /* 将当前 url 参数转成一个 js 对象 */
        $ace.getQueryParams = function () {
            var params = {};
            var loc = window.location;
    
            if (!loc.search) {
                return params;
            }
    
            var paramsString;
            paramsString = loc.search.substr(1);//将?去掉
            var arr = paramsString.split("&");
            for (var i = 0; i < arr.length; i++) {
                var item = arr[i];
                var index = item.indexOf("=");
                if (index == -1)
                    continue;
                var paramName = item.substr(0, index);
                if (!paramName)
                    continue;
                var value = item.substr(index + 1);
                params[paramName] = decodeURIComponent(value);
            }
            return params;
        }
    
        $ace.findName = function (optionList, value, valuePropName, textPropName) {
            valuePropName = valuePropName || "Id";
            textPropName = textPropName || "Name";
            return $ace.findText(optionList, value, valuePropName, textPropName);
        }
        $ace.findText = function (optionList, value, valuePropName, textPropName) {
            if (optionList.length == 0)
                return null;
    
            var valuePropertyNames;
            var textPropertyNames;
            if (valuePropName) {
                valuePropertyNames = [valuePropName];
                textPropertyNames = [textPropName];
            }
            else {
                valuePropertyNames = ["Id", "id", "Value", "value"];
                textPropertyNames = ["Name", "name", "Text", "text"];
            }
    
            valuePropName = valuePropertyNames.first(function (name) {
                return name in optionList[0];
            });
            textPropName = textPropertyNames.first(function (name) {
                return name in optionList[0];
            });
    
            var text = null;
            var len = optionList.length;
            for (var i = 0; i < len; i++) {
                if (optionList[i][valuePropName] == value) {
                    text = optionList[i][textPropName];
                    break;
                }
            }
    
            return text;
        }
    
        $ace.selectFields = function (items, fieldName) {
            return items.select(function (item) {
                return item[fieldName];
            });
        }
        $ace.selectIds = function (items) {
            if (items.length == 0)
                return [];
    
            var names = ["Id", "id", "ID"];
    
            var name;
            for (var i = 0; i < names.length; i++) {
                if (names[i] in items[0]) {
                    name = names[i];
                    break;
                }
            }
    
            return $ace.selectFields(items, name);
        }
        $ace.selectTexts = function (items) {
            if (items.length == 0)
                return [];
    
            var names = ["Name", "name", "Text", "text"];
    
            var name;
            for (var i = 0; i < names.length; i++) {
                if (names[i] in items[0]) {
                    name = names[i];
                    break;
                }
            }
    
            return $ace.selectFields(items, name);
        }
    
        $ace.browser = function () {
            var userAgent = navigator.userAgent;
            var isOpera = userAgent.indexOf("Opera") > -1;
            if (isOpera) {
                return "Opera"
            };
            if (userAgent.indexOf("Firefox") > -1) {
                return "FF";
            }
            if (userAgent.indexOf("Chrome") > -1) {
                if (window.navigator.webkitPersistentStorage.toString().indexOf('DeprecatedStorageQuota') > -1) {
                    return "Chrome";
                } else {
                    return "360";
                }
            }
            if (userAgent.indexOf("Safari") > -1) {
                return "Safari";
            }
            if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) {
                return "IE";
            };
        }
        $ace.download = function (url, data, method) {
            if (url && data) {
                data = typeof data == 'string' ? data : jQuery.param(data);
                var inputs = '';
                $.each(data.split('&'), function () {
                    var pair = this.split('=');
                    inputs += '<input type="hidden" name="' + pair[0] + '" value="' + pair[1] + '" />';
                });
                $('<form action="' + url + '" method="' + (method || 'post') + '">' + inputs + '</form>').appendTo('body').submit().remove();
            };
        };
    
        /* 依赖 bootstrap ui */
        $ace.selectRow = function (selectedTr) {
            var c = "warning";
            $(selectedTr).addClass(c);
            $(selectedTr).siblings().removeClass(c);
            //console.log($(selectedTr).attr("deny"));
            /*if ($(selectedTr).attr("deny") == "true") {
                jQuery(".a-btn-edit,.a-btn-delete,.btn-auth").attr("disabled", true);
            }
            else {
                jQuery(".a-btn-edit,.a-btn-delete,.btn-auth").attr("disabled", false);
            }*/
            return true;
        }
        $ace.formatBool = function (val) {
            if (val == true) {
                return "是";
            }
            else if (val == false) {
                return "否";
            }
    
            return val;
        }
    
    
        function execAjax(type, url, data, callback) {
            var layerIndex = layer.load(2);
            var ret = $.ajax({
                url: url,
                type: type,
                dataType: "json",
                data: data,
                complete: function (xhr) {
                    layer.close(layerIndex);
                },
                success: function (result) {
                    var isStandardResult = ("Status" in result) && ("Msg" in result);
                    if (isStandardResult) {
                        if (result.Status == ResultStatus.Failed) {
                            layerAlert(result.Msg || "操作失败");
                            return;
                        }
                        if (result.Status == ResultStatus.NotLogin) {
                            layerAlert(result.Msg || "未登录或登录过期,请重新登录");
                            return;
                        }
                        if (result.Status == ResultStatus.Unauthorized) {
                            layerAlert(result.Msg || "权限不足,禁止访问");
                            return;
                        }
    
                        if (result.Status == ResultStatus.OK) {
                            /* 传 result,用 result.Data 还是 result.Msg,由调用者决定 */
                            callback(result);
                        }
                    }
                    else
                        callback(result);
                },
                error: errorCallback
            });
            return ret;
        }
        function errorCallback(xhr, textStatus, errorThrown) {
            var json = { textStatus: textStatus, errorThrown: errorThrown };
            alert("请求失败: " + JSON.stringify(json));
        }
        function parseUrl(url) {
            if (url.indexOf("_dc=") < 0) {
                if (url.indexOf("?") >= 0) {
                    url = url + "&_dc=" + (new Date().getTime());
                } else {
                    url = url + "?_dc=" + (new Date().getTime());
                }
            }
            return url;
        };
    
        function layerAlert(msg, callBack) {
            msg = msg == null ? "" : msg;/* layer.alert 传 null 会报错 */
            var type = 'warning';
            var icon = "";
            if (type == 'success') {
                icon = "fa-check-circle";
            }
            if (type == 'error') {
                icon = "fa-times-circle";
            }
            if (type == 'warning') {
                icon = "fa-exclamation-circle";
            }
    
            var idx;
            idx = layer.alert(msg, {
                icon: icon,
                title: "系统提示",
                btn: ['确认'],
                btnclass: ['btn btn-primary'],
            }, function () {
                layer.close(idx);
                if (callBack)
                    callBack();
            });
        }
        function layerConfirm(content, callBack) {
            var idx;
            idx = layer.confirm(content, {
                icon: "fa-exclamation-circle",
                title: "系统提示",
                btn: ['确认', '取消'],
                btnclass: ['btn btn-primary', 'btn btn-danger'],
            }, function () {
                layer.close(idx);
                callBack();
            }, function () {
    
            });
        }
        function layerMsg(msg, callBack) {
            msg = msg == null ? "" : msg;/* layer.msg 传 null 会报错 */
            layer.msg(msg, { time: 2000, shift: 0 });
        }
    
    
        window.$ace = $ace;
    })($);
    
    
    /* $ 扩展 */
    (function ($) {
    
        /* 设置标签的值,同时触发 change 事件 */
        $.fn.setValue = function (val) {
            this.val(val);
            this.change();
        }
    
        /* 根据值设置 select 标签的选中项,同时触发 change 事件 */
        $.fn.setSelectedValue = function (val) {
            for (var j = 0; j < this.length; j++) {
                var selectElement = this[j];
                for (var i = 0; i < selectElement.options.length; i++) {
                    var op = selectElement.options[i];
                    if (op.value == val) {
                        op.selected = true;
                        $(selectElement).change();
                        break;
                    }
                }
            }
        };
        $.fn.getSelectedValue = function () {
            var ret = "";
            var c = "";
            for (var j = 0; j < this.length; j++) {
                var selectElement = this[j];
                var idx = selectElement.selectedIndex;
                ret += c + selectElement[idx].value;
                c = ";";
            }
    
            return ret;
        };
        $.fn.getSelectedText = function () {
            var ret = "";
            var c = "";
            for (var j = 0; j < this.length; j++) {
                var selectElement = this[j];
                var idx = selectElement.selectedIndex;
                ret += c + selectElement[idx].text;
                c = ";";
            }
    
            return ret;
        };
    
        /* 设置 radio、checkbox 状态为选中 */
        $.fn.checked = function () {
            for (var j = 0; j < this.length; j++) {
                var ele = this[j];
                var old = ele.checked;
                ele.checked = true;
                if (old != ele.checked)
                    $(ele).change();
            }
        }
        /* 设置 radio、checkbox 状态为未选中 */
        $.fn.unchecked = function () {
            for (var j = 0; j < this.length; j++) {
                var ele = this[j];
                var old = ele.checked;
                ele.checked = false;
                if (old != ele.checked)
                    $(ele).change();
            }
        }
        /* 设置 radio、checkbox 状态。如果传入的 value 与控件的 value 相等,则设置为选中,否则不选中 */
        $.fn.setChecked = function (value) {
            var inputValues = [];
    
            if (value instanceof Array) {
                inputValues = value;
            }
            else {
                inputValues.push(value);
            }
    
            var values = [];
    
            for (var i = 0; i < inputValues.length; i++) {
                var value = inputValues[i];
                if (value === true)
                    values.push("true");
                else if (value === false)
                    values.push("false");
                else if (value !== undefined && value !== null) {
                    values.push(value);
                }
            }
    
            for (var i = 0; i < this.length; i++) {
                var ele = this[i];
                var checked = false;
                for (var j = 0; j < values.length; j++) {
                    var value = values[j];
                    if (ele.value == value) {
                        checked = true;
                        break;
                    }
                }
    
                var old = ele.checked;
    
                if (checked) {
                    ele.checked = true;
                }
                else {
                    ele.checked = false;
                }
    
                if (old != ele.checked)
                    $(ele).change();
            }
        }
        /* 获取被选中的 radio、checkbox 值 */
        $.fn.getCheckedValue = function () {
            for (var j = 0; j < this.length; j++) {
                var ele = this[j];
                if (ele.checked == true) {
                    return ele.value;
                }
            }
    
            return null;
        }
    
        $.fn.formValid = function () {
            return true;//未做前端校验
            return $(this).valid({
                errorPlacement: function (error, element) {
                    element.parents('.formValue').addClass('has-error');
                    element.parents('.has-error').find('i.error').remove();
                    element.parents('.has-error').append('<i class="form-control-feedback fa fa-exclamation-circle error" data-placement="left" data-toggle="tooltip" title="' + error + '"></i>');
                    $("[data-toggle='tooltip']").tooltip();
                    if (element.parents('.input-group').hasClass('input-group')) {
                        element.parents('.has-error').find('i.error').css('right', '33px')
                    }
                },
                success: function (element) {
                    element.parents('.has-error').find('i.error').remove();
                    element.parent().removeClass('has-error');
                }
            });
        }
    
        $.fn.getFormData = function () {
            var $form = $(this);
            var model = {};
            $form.find('input,select,textarea').each(function (r) {
                var $this = $(this);
                var name = $this.attr('name');
    
                if (!name)
                    return;
    
                var type = $this.attr('type');
                if ($this.attr("disabled") == "disabled")
                    return;
    
                switch (type) {
                    case "checkbox":
                        var checkboxValues;
                        if (name in model) {
                            checkboxValues = model[name];
                        }
                        else {
                            checkboxValues = [];
                            model[name] = checkboxValues;
                        }
    
                        if (this.checked) {
                            checkboxValues.push($this.val());
                        }
                        break;
                    case "radio":
                        if (model[name] === undefined)
                            model[name] = null;
                        if (this.checked == true)
                            model[name] = this.value;
                        break;
                    case "button":
                        break;
                    default:
                        var value = $this.val();
                        model[name] = value;
                        break;
                }
            });
            if ($('[name=__RequestVerificationToken]').length > 0) {
                model["__RequestVerificationToken"] = $('[name=__RequestVerificationToken]').val();
            }
            return model;
        };
        $.fn.setFormData = function (data) {
            var $form = $(this);
            $form.find('input,select,textarea').each(function (r) {
                var $ele = $(this);
                var name = $ele.attr('name');
    
                if (!name)
                    return;
    
                var type = $ele.attr('type');
    
                var value = null;
                if (name in data)
                    value = data[name];
                else
                    return;//如果模型中不存在相应的name属性,则不管
    
                switch (type) {
                    case "checkbox":
                        var values = value || []; //对于checkbox,value是一个数组
    
                        for (var i = 0; i < $ele.length; i++) {
                            var checkbox = $ele[i];
                            var checkboxValue = checkbox.value;
                            var checked = false;
                            for (var j = 0; j < values.length; j++) {
                                if (checkboxValue == values[j]) {
                                    checked = true;
                                    break;
                                }
                            }
                            checkbox.checked = checked;
                        }
                        break;
                    case "radio":
                        $ele.setChecked(value);
                        break;
                    case "select":
                        $ele.val(value).trigger("change");
                        break;
                    case "button":
                        break;
                    default:
                        $ele.val(value);
                        break;
                }
            });
        };
    
        $.fn.bindSelect = function (options) {
            var defaults = {
                value: "Id",
                text: "Name",
                change: null,
                items: [],
                placeholder: "-请选择-"
            };
            var options = $.extend(defaults, options);
            var $element = $(this);
    
            if (options.placeholder !== null && options.placeholder !== undefined)
                $element.append($("<option></option>").val("").html(options.placeholder));
    
            items = options.items;
            $.each(items, function (i) {
                $element.append($("<option></option>").val(items[i][options.value]).html(items[i][options.text]));
            });
    
            if (options.change)
                $element.change(options.change);
    
            return;
        }
    
        $.fn.disable = function () {
            var $element = $(this);
            $element.attr("disabled", "disabled");
        }
        $.fn.enable = function () {
            var $element = $(this);
            $element.removeAttr("disabled");
        }
    
    
        $.loading = function (bool, text) {
            var $loadingpage = top.$("#loadingPage");
            var $loadingtext = $loadingpage.find('.loading-content');
            if (bool) {
                $loadingpage.show();
            } else {
                if ($loadingtext.attr('istableloading') == undefined) {
                    $loadingpage.hide();
                }
            }
            if (!!text) {
                $loadingtext.html(text);
            } else {
                $loadingtext.html("数据加载中,请稍后…");
            }
            $loadingtext.css("left", (top.$('body').width() - $loadingtext.width()) / 2 - 50);
            $loadingtext.css("top", (top.$('body').height() - $loadingtext.height()) / 2);
        }
    })($);
    
    
    
    function ViewModel() {
        var me = this;
    
        me.searchModel = _ob({});
        me.url = null;//加载数据的url
        me.deleteUrl = null;
        me.modelKeyName = "Id"; /* 实体主键名称 */
    
        /* 如有必要,子类需重写 DataTable、Dialog */
        me.dataTable = new PagedDataTable(me);
        me.dialog = new Dialog();
    
        me.init = function () {
            me.loadData();
        }
    
        /* 添加按钮点击事件 */
        me.add = function () {
            ensureNotNull(me.dialog, "dialog");
            me.dialog.open(null, "添加");
        }
    
        /* 编辑按钮点击事件 */
        me.edit = function () {
            ensureNotNull(me.dataTable, "DataTable");
            ensureNotNull(me.dialog, "Dialog");
            me.dialog.open(me.dataTable.selectedModel(), "修改");
        }
    
        /* 删除按钮点击事件 */
        me.del = function () {
            $ace.confirm("确定要删除该条数据吗?", me.onDelete);
        }
    
        me.onDelete = function () {
            deleteRow();
        }
        /* 要求每行必须有 Id 属性,如果主键名不是 Id,则需要重写 me.ModelKeyName */
        function deleteRow() {
            if (me.deleteUrl == null)
                throw new Error("未指定 DeleteUrl");
    
            var url = me.deleteUrl;
            var params = { id: me.dataTable.selectedModel()[me.modelKeyName]() };
            $ace.post(url, params, function (result) {
                var msg = result.Msg || "删除成功";
                $ace.msg(msg);
                me.dataTable.removeSelectedModel();
            });
        }
    
        /* 搜索按钮点击事件 */
        me.search = function () {
            me.loadData();
        }
        me.getSearchModel = function () {
            var model = me.searchModel();
            model = JSON.parse(JSON.stringify(model));
            return model;
        }
    
        /* 加载数据 */
        me.loadData = function (page) {
            if (me.url == null)
                return;
    
            var data = me.getSearchModel();
            if (page)
                data.page = page;
            $ace.get(me.url, data, function (result) {
                me.dataTable.setData(result.Data);
            });
        }
    
        function ensureNotNull(obj, name) {
            if (!obj)
                throw new Error("属性 " + name + " 未初始化");
        }
    }
    function DataTable(vmOrDataLoader) {
        var me = this;
    
        me.models = _oba([]);
        me.selectedModel = _ob(null);
    
        me.getOrdinal = function ($index) {
            return $index + 1;
        }
        me.selectRow = function (model, event) {
            me.selectedModel(model);
            $ace.selectRow(event.currentTarget);
            return true;
        }
        me.removeSelectedModel = function () {
            var selectedModel = me.selectedModel();
            if (selectedModel) {
                me.models.remove(selectedModel);
            }
        }
    
        me.setData = function (models) {
            var wrapedModels = $ko.toOb(models);
            me.models(wrapedModels);
            me.selectedModel(null);
        }
        me.setModels = function (models) {
            me.setData();
        }
    
        me.reload = function () {
            if (!vmOrDataLoader)
                throw new Error("未实现 loadData 方法");
    
            if ($.isFunction(vmOrDataLoader)) {
                vmOrDataLoader();
            }
            else {
                if ("loadData" in vmOrDataLoader)
                    vmOrDataLoader.loadData();
                else
                    throw new Error("vmOrDataLoader 未实现 loadData 方法");
            }
        }
    }
    function PagedDataTable(vmOrDataLoader) {
        var me = this;
        DataTable.call(me, vmOrDataLoader);
    
        me.showFirstPage = _ob(false);
        me.showLastPage = _ob(false);
        me.totalCount = _ob(0);
        me.totalPage = _ob(0);
        me.currentPage = _ob(0);
        me.skipPage = _ob(0);
        me.pageSize = _ob(0);
    
        me.showPages = _oba();
    
        me.getOrdinal = function ($index) {
            return (me.currentPage() - 1) * me.pageSize() + $index + 1;
        }
    
        me.setData = function (pagedData) {
            var wrapedData = $ko.toOb(pagedData);
            me.models(wrapedData.Models());
            me.totalCount(wrapedData.TotalCount());
            me.totalPage(wrapedData.TotalPage());
            me.currentPage(wrapedData.CurrentPage());
            me.skipPage(wrapedData.CurrentPage());
            me.pageSize(wrapedData.PageSize());
    
            var showPageCount = 6;
    
            var min = me.currentPage() - (showPageCount / 2);
    
            if (min < 1)
                min = 1;
    
            var max = min + showPageCount;
    
            if (max > me.totalPage()) {
                max = me.totalPage();
                min = max - showPageCount;
                if (min < 1)
                    min = 1;
            }
    
            var showPages = [];
            for (var i = min; i <= max; i++) {
                showPages.push(i);
            }
            me.showPages(showPages);
    
            me.showFirstPage(min != 1);
            me.showLastPage(max != me.totalPage());
            me.selectedModel(null);
        }
        me.setPagedData = function (pagedData) {
            me.setData();
        }
        me.toPage = function (page) {
            if (page < 1 || page > me.totalPage() || page == me.currentPage())
                return;
            me.loadData(page);
        }
    
        me.loadData = function (page) {
            if (!vmOrDataLoader)
                throw new Error("未实现 loadData 方法");
    
            if ($.isFunction(vmOrDataLoader)) {
                vmOrDataLoader(page);
            }
            else {
                if ("loadData" in vmOrDataLoader)
                    vmOrDataLoader.loadData(page);
                else
                    throw new Error("vmOrDataLoader 未实现 loadData 方法");
            }
        }
        me.reload = function () {
            me.loadData(me.currentPage());
        }
    
    
        function isFunction(obj) {
            return typeof obj === "function";
        }
    }
    function Dialog() {
        var me = this;
    
        /* must */
        me.title = _ob(null);
        me.isShow = _ob(false);
    
        me.editModel = _ob(null);
        me.model = _ob({});//绑定到界面的 model
        /* end must */
    
        /* must */
        me.close = function () {
            me.isShow(false);
        }
        me.open = function (model, title) {
            if (me.isShow()) {
                me.isShow(false);//确保触发值改变事件。有时候当模态框处于未打开状态时me.isShow()的值依然是true,比如按esc关闭模态框后
            }
            me.isShow(true);
    
            me.model({});
            if (model) {
                me.editModel(model);
            }
            else {
                me.editModel(null);
            }
    
            if (title)
                me.title(title);
    
            me.onOpen();
        }
        me.save = function () {
            me.onSave();
        }
        /* end must */
    
    
        me.onOpen = function () {
            var model = me.editModel();
            if (model) {
                var bindModel = $ko.toJS(model);
                me.model(bindModel);
            }
            else {
                me.model({});
            }
        }
        me.onSave = function () {
            throw new Error("未重写 OnSave 方法");
        }
    }
  • 相关阅读:
    server-conf-PPTConf
    client-autoReport-ppt
    client-autoReport-common
    浏览器书签导出
    微信公众号JSAPI支付-多公众号向同一商户号支付的问题解决
    Kettle 4.4.0 通过 Java 代码 输出日志到表
    spring tx:advice事务配置
    Spring异常捕获而且回滚事务的方法
    移动端服务器i-jetty下载编译安装及问题解决系列
    I-Jetty部署war包到安卓手机
  • 原文地址:https://www.cnblogs.com/niceletter/p/11101375.html
Copyright © 2011-2022 走看看