zoukankan      html  css  js  c++  java
  • 在javascript中实现类似asp.net webcontrol中的render的方法

    在asp.net中的webcontrol开发的时候采用render方法来呈现控件。在javascript中,对于一些html代码的拼接大多数情况下采用字符串相加的方式来处理,这样做有以下弊端:

    1.可读性差,易出错,出错后不易发现。

    2.在javascript最小化的时候,长长的字符串不能最下化。

    于是在项目中我实现了累死render的方法来处理html代码的拼接。

    StringBuilder = function () {
    		var self = this,
    			strs = [];
    
    		self.append = function (str) {
    			strs.push(str);
    		};
    
    		self.toString = function () {
    			return strs.join("");
    		};
    
    		self.dispose = function () {
    			strs = null;
    		};
    	},
    
    	TextElement = function (text) {
    		this.text = text;
    
    		this.render = function () {
    			return this.text;
    		};
    	},
    
    	HtmlElement = function (tagName, innerText, attributes) {
    		var self = this,
    			halfTags = { br: true, img: true, hr: true, input: true };
    
    		self.tagName = tagName || "div";
    		self.attributes = attributes || {};
    		self.innerText = innerText || "";
    		self.children = [];
    
    		if ($.isPlainObject(innerText)) {
    			self.innerText = "";
    			self.attributes = innerText;
    		}
    
    		self._isShortTag = false;
    
    		if (halfTags[self.tagName] === true) {
    			self._isShortTag = true;
    		}
    
    		self.render = function () {
    			var sb = new StringBuilder(),
    				html = "";
    
    			sb.append(self._renderBeginTag(self.tagName, self.attributes));
    			if (self.innerText !== "") {
    				sb.append(self.innerText);
    			}
    
    			if (self.children.length > 0) {
    				$.each(self.children, function (index, ele) {
    					sb.append(ele.render());
    				});
    			}
    
    			sb.append(self._renderEndTag(self.tagName));
    			html = sb.toString();
    			sb.dispose();
    
    			return html;
    		};
    
    		self.add = function (ele) {
    			this.children.push(ele);
    		};
    
    		self._renderBeginTag = function (tagName, attributes) {
    			var sb = new StringBuilder(),
    				strRet = "";
    			sb.append("<");
    			sb.append(tagName);
    			$.each(attributes, function (key, value) {
    				sb.append(" ");
    				sb.append(key);
    				sb.append("=");
    				sb.append("\"");
    				sb.append(value.toString());
    				sb.append("\"");
    			});
    
    			if (this._isShortTag) {
    				sb.append(" ");
    			} else {
    				sb.append(">");
    			}
    
    			strRet = sb.toString();
    			sb.dispose();
    
    			return strRet;
    		};
    
    		self._renderEndTag = function (tagName) {
    			var sb = new StringBuilder(),
    				strRet = "";
    
    			if (this._isShortTag) {
    				sb.append("/>");
    			} else {
    				sb.append("</");
    				sb.append(tagName);
    				sb.append(">");
    			}
    			strRet = sb.toString();
    			sb.dispose();
    			return strRet;
    		};
    	};
    

    最上面上在javascript中实现了一个stringBuilder类。处理字符串拼接的。用户用的时候采用下面的方法来调用HtmlElement这个类

    var div = new HtmlElement("div", {class:"divcss"});
    var innertextbox = new HtmlElement("input", {type:"text"});
    div.add(innertextbox);
    var str =  div.render();
    

    str得到的结果是

    <div class="divcss">
    <input type="text" />
    </div>
    

    在使用的时候可以将创建textbox以及一些常用的html element封装成方法,这样就能提高代码的重用性,减少代码体积,也便于维护。

  • 相关阅读:
    3.1.3、控制结构
    3.1.2、变量
    3.1.1、渲染模板
    3.1、Jinja2模板引擎
    第3章 模板
    2.6、Flask扩展
    2.5.4、响应
    2.5.3、请求钩子
    2.5.2、请求调度
    2.5.1、程序和请求上下文
  • 原文地址:https://www.cnblogs.com/dail/p/2112594.html
Copyright © 2011-2022 走看看