把名称和后台来的json数据约定起来,可以达到的效果就是可以将东西统一化,减少差异,提升模块等的通用性,此后就可以实现具体不同模块内容可以自动或拷贝赋值的方式

2016.7.18 refactor string formatter code:

    String.prototype.format = function () {
var that = this;
var params = arguments;
function applychange(arrayorobject) {
for (var i in arrayorobject) {
var regtoreplace = new RegExp("({)" + i + "(})");
var valtoreplace = arrayorobject[i];
var replacing = function () { return regtoreplace.test(that); }
while (replacing()) {
that = that.replace(regtoreplace, valtoreplace);
}
}
}
applychange(typeof ps[0] !== 'object' ? params : params[0]);
return that;
};

  

another realization, more slim:

    String.prototype.format = function () {
var me = this;
var ps = arguments;
function chg(el) {
for (var i in el) {
var reg = new RegExp("({)" + i + "(})");
var val = el[i];
var ing = function () { return reg.test(me); }
while (ing()) {
me = me.replace(reg, val);
}
}
}
chg(typeof ps[0] !== 'object' ? ps : ps[0]);
return me;
};

  

顺带,这个前端项目中用到的控件,一般是手写,其他类型,比如菜单是  accordion.js这个手风琴控件

note: 关于 {在字符串中的匹配,以""的字符串中,因为\是转义符,"\"是不允许出现的,即在字符串中一定是"\\",所以首先转一次得到\\为字符串的转义符,再+{,即可匹配得到{

(function () {
    "Use Strict";
    String.prototype.format = function (arg) {
        var that = this;
        var args = arguments;
        if (arg instanceof Object && args.length == 1) {
            for (var i in arg) {
                var reg = new RegExp("({" + i + "})");
                while (reg.test(that)) {
                    that = that.replace(reg, arg[i]);
                }
            }
        }
        else {
            for (var i = 0; i < args.length; i++) {
                var reg = new RegExp("({)" + i + "(})");
                var param = args[i];
                while (reg.test(that)) {
                    that = that.replace(reg, param);
                }
            }
        }
        return that;
    }
})();

  

/* File Created: 十二月 18, 2014 
*@Author iGO
*@LastModify 2014-12-19
**/
//使用闭包,为了增加开发效率而写的自动化赋值的类 //todo: string对象 添加公有format方法
(String.prototype.format = function(args) {
    var result = this;
    if (arguments.length > 0) {
        if (arguments.length == 1 && typeof (args) == "object") {
            for (var key in args) {
                if (args[key] != undefined) {
                    var reg = new RegExp("({" + key + "})", "g");
                    result = result.replace(reg, args[key]);
                }
            }
        } else {
            for (var i = 0; i < arguments.length; i++) {
                if (arguments[i] != undefined) {
                    //var reg = new RegExp("({[" + i + "]})", "g");//这个在索引大于9时会有问题,谢谢何以笙箫的指出
                    var regt = new RegExp("({)" + i + "(})", "g");
                    result = result.replace(regt, arguments[i]);
                }
            }
        }
    }
    return result;
})(); //todo:封装的一些公用的小方法
var commonHelper = (function ($, commonHelper) {
    var baseUrl = "http://51creator.vicp.net/cloudants/";     var $id = function (id) { return document.getElementById(id); }
    commonHelper.doNothing = function () { };
    //暂不启用!通用赋值,将所有判断做明确,用一个统一的端口接入,实现所有代码共用一套操作,达到最大复用。减少不同具体模块方法的差异,增加通用性
        commonHelper.applyAlt= function(jsonObject) {
            for (var i in jsonObject) {
                var obj = $id(i);
                var objVal = jsonObject[i];
                //赋值text
                if (obj && !(objVal instanceof Array && obj.innerText)) {
                    $("#" + i).text(jsonObject[i]);
                }
                //赋值图片 图片判断
                if (obj.tagName == "img") {
                    $("#" + i).attr("src", objVal);
                }
                //赋值图表,类型为几种,canvas,内层判断为 按后缀,bar line 和pichart                 //赋值模板
            }
        }     commonHelper.apply = function (jsonObject) {
        if (!jsonObject) return "";
        for (var i in jsonObject) {
            if (document.getElementById(i) && !(jsonObject[i] instanceof Array)) {
                $("#" + i).text(jsonObject[i]);
            }
        }
    }
    commonHelper.applySrc = function (jsonObject) {
        for (var i in jsonObject) {
            if (jsonObject[i].toString().indexOf(".") > -1)
                $("#" + i).attr("src", jsonObject[i]);
        }
    }
    commonHelper.applyChartBar = function (jsonObject) {
        for (var i in jsonObject) {
            if (i.toString().indexOf("_bar") != -1 && document.getElementById(i) != null) {
                var ctx3 = document.getElementById(i).getContext("2d");
                window.myBar3 = new Chart(ctx3).Bar(jsonObject[i], { responsive: true });
            }
        }
    }
    commonHelper.applyChartLine = function (jsonObject) {
        for (var i in jsonObject) {
            if (i.toString().indexOf("_line") != -1 && document.getElementById(i) != null) {
                var ctx2 = document.getElementById(i).getContext("2d");
                window.myLine2 = new Chart(ctx2).Line(jsonObject[i], { responsive: true });
            }
        }
    }
    commonHelper.applyPiChart = function (ret) {
        for (var i in ret) {
            if (document.getElementsByClassName(i).length > 0)
                $("." + i).attr("data-percent", ret[i]).easyPieChart({
                    animate: 1000,
                    size: 100,
                    lineCap: "square",
                    scaleColor: "#ccc",
                    trackColor: "#ddd",
                    barColor: "#0093dd",
                    lineWidth: "3"
                }); ;
        };
    }     commonHelper.applyTemplate = function (el, template) {
        var text = "", args = arguments;
        if (arguments.length >= 2) {
            for (var i = 2; i < arguments.length; i++) {
                var reg = new RegExp("({)" + (i - 2) + "(})", "g");
                template = template.replace(reg, arguments[i]);
            }
        }
        text = template;
        $("#" + el).html(text);
    }     commonHelper.applyTemplate = function (el, template, argArray) {     }     commonHelper.getUrl = function (token) {
        return baseUrl + token;
    }     return commonHelper;
})(jQuery, commonHelper || {}); 模块写法,使用了js模块架构模式中的Module模式
/* File Created: 十二月 9, 2014 */

/*
*Latest Modify:2014-12-12
*Updator:iGO
*login logic 
*
**/ var page351Helper = (function ($, page351Helper, ajaxHelper, commonHelper) {
    "Use Strict";
    var applyStoreInfo_RT = function (ret) {
        ret = ret || { "success": true, "store_lunname": "lun1", "store_errors": "10", "store_alarms": "10" };
        commonHelper.apply(ret);
    }
    var applyStoreCapacity_RT = function (ret) {
        ret = ret || { "success": true, "store_total": "100G", "store_used": "50G", "store_health": "20%" };
        commonHelper.apply(ret);
        $("#store_used").height(ret.store_health);
    }
    var applyStoreFullInfo_RT = function (ret) {
        ret = ret || { "success": true, "store_id": "1", "store_name": "store1", "store_lunlocation": "XXX", "store_type": "XXX", "store_volumespace": "XXX", "store_linkhosts": "8", "store_linkvms": "4", "store_pathsmode": "XXX", "store_allpaths": "18" };
        commonHelper.apply(ret);
    }
    var applyStoreIODelay_RT = function (ret) {
        ret = ret || {};
        commonHelper.applyChartBar(ret);
        commonHelper.apply(ret);
    }
    var applyStoreEntity_RT = function (ret) {
        ret = ret || {};
        commonHelper.apply(ret);
    }     page351Helper.initial = function () {
        //todo:接口:store!getStoreInfo_RT
        ajaxHelper.post({
            url: commonHelper.getUrl("store!getStoreInfo_RT"),
            data: { store_id: "" },
            success: applyStoreInfo_RT
        });
        //todo:接口:store!getStoreCapacity_RT
        ajaxHelper.post({
            url: commonHelper.getUrl("store!getStoreCapacity_RT"),
            data: { store_id: "" },
            success: applyStoreCapacity_RT
        });
        //todo:接口:getStoreFullInfo_RT
        ajaxHelper.post({
            url: commonHelper.getUrl("getStoreFullInfo_RT"),
            data: { store_id: "" },
            success: applyStoreFullInfo_RT
        });
        //todo:接口:store!getStoreIODelay_RT 
        ajaxHelper.post({
            url: commonHelper.getUrl("store!getStoreIODelay_RT"),
            data: { store_id: "" },
            success: applyStoreIODelay_RT
        });
        //todo:接口:store!getStoreEntity_RT
        ajaxHelper.post({
            url: commonHelper.getUrl("store!getStoreEntity_RT"),
            data: { store_id: "" },
            success: applyStoreEntity_RT
        });
    }     return page351Helper; })(jQuery, page351Helper || {}, AJAXHelper, commonHelper);
$(function () {
    page351Helper.initial();
}); [Ps:把有一个需要改进的地方说一下吧,因为这个项目本来前端是分块儿的,所以数据上一般是不重复的,在数据上加了前缀,但是按一般的方法,此处数据映射赋值的时候缺少了context上下文,也就导致可能会出现后面的赋值覆盖掉前面的值,这里最好是配一下context,就是在module的模块上加上接口名称吧,然后映射到页面取值的时候需要在映射器这里取父容器为context的div]

我在一个前端项目中用js整理的一些通用方法,其中使用到的思想,主要就是约定了。的更多相关文章

  1. thinkphp在前端页面的js代码中可以使用 U方法吗? 可以使用模板变量如__URL__等吗?

    thinkphp在前端页面的js代码中可以使用 U方法吗? : 可以的! tp的U方法, 是"全局的", 什么是全局的? 就是, 可以在 "任何地方"使用的: ...

  2. Asp.Net中用JS中操作cookie的方法

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="cookies.aspx.cs& ...

  3. js文件流下载通用方法

    通常我们会用到文件流下载文件,下面给大家一个通用的文件流下载的js /* *下载文件 * options:{ * url:'', //下载地址 * isNewWinOpen:false,是否新窗口打开 ...

  4. js写的一些通用方法

    Js获取当前浏览器支持的transform兼容写法 // 获取当前浏览器支持的transform兼容写法 function getTransfrom() { var transform = '', / ...

  5. javascript功能插件大集合 前端常用插件 js常用插件

    转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具.•npm – npm 是 javascript 的包管 ...

  6. 在基于ABP框架的前端项目Vue&Element项目中采用日期格式处理,对比Moment.js和day.js的处理

    Day.js 是一个轻量的处理时间和日期的 JavaScript 库,和 Moment.js 的 API 设计保持完全一样. 如果您曾经用过 Moment.js, 那么您已经知道如何使用 Day.js ...

  7. 前端框架Vue.js——vue-i18n ,vue项目中如何实现国际化

    本项目利用  VueI18n 组件进行国际化,使用之前,需要进行安装 $ npm install vue-i18n 一.框架引入步骤: 1. 先在 main.js 中引入 vue-i18n. // 国 ...

  8. 前端(小程序)项目Aes.js/Md5.js加密的处理方法

    做项目中需要对前端数据加密传输这个时候需要用到前端加密的算法主要是:Aes.js,Md5.js 一.Vue项目用到的aes.js加密. 1.直接在index.html引入aes.js或者在npm in ...

  9. 在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表

    在我的<FastReport报表随笔>介绍过各种FastReport的报表设计和使用,FastReport报表可以弹性的独立设计格式,并可以在Asp.net网站上.Winform端上使用, ...

随机推荐

  1. C#导出数据到CSV和EXCEL文件时数字文本被转义的解决方法

    今天写C#导出datagrid数据到csv格式文件的时候,发现不管怎么尝试,凡是单元格里面全是数字的单元格,在用Excel打开的时候,都被自动转义成数据格式.数据查看极其不方便.最后google了一下 ...

  2. Java日志(二):log4j与XML配置文件

    [Java日志(一):log4j与.properties配置文件]一文列举的几个案例以.properties文件作为log4j的配置文件,本文简单看一下log4j与XML配置文件 (1)XML配置文件 ...

  3. Wireshark lua dissector 对TCP消息包合并分析

    应用程序发送的数据报都是流式的,IP不保证同一个一个应用数据包会被抓包后在同一个IP数据包中,因此对于使用自制dissector的时候需要考虑这种情况. Lua Dissector相关资料可以见:ht ...

  4. ES5新增数组方法(2):map

    通过指定函数处理数组的每个元素,并返回处理后的数组. 1.计算数组中每个元素的平方 let arr = [1, 2, 3, 4, 5, 6]; let newArr = arr.map(item =& ...

  5. 面向对象 公有私有 property classmethod staticmethod

    接口类(抽象类)--------就是一种规范 面向对象的私有与公有 对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的访问限制不 ...

  6. python 基础篇 13 迭代器与生成器

    13. 前⽅⾼能-迭代器和⽣成器本节主要内容:1. 迭代器2. ⽣成器 ⼀. 迭代器我们之前⼀直在⽤可迭代对象进⾏迭代操作. 那么到底什么是可迭代对象. 本⼩节主要讨论可迭代对象. ⾸先我们先回顾⼀下 ...

  7. 洛谷P1378油滴扩展

    题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界. 必须等一个油滴扩展完毕才能放置下一个油滴 ...

  8. cocos2d-x环境搭建 摘自百度文库

    cocos2d-x环境搭建 引言:笔者在网上寻觅了很多资料,最终发现了这份实际可用的文档,供大家参考.源地址:http://wenku.baidu.com/view/93f7b0f1102de2bd9 ...

  9. java面笔准备

    这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的朋友在笔试时更好地赢得笔试和面试.由于这套面试题涉及的范围很泛,很广,很杂,大家不可能一天两天就看完 ...

  10. 打包成exe程序

    https://blog.csdn.net/harvic880925/article/details/27675073 当然针对这种exe文件,也可以解压出来得到具体的debug文件夹下的内容.