您的位置:首页 > Web前端 > JavaScript

在javascript中实现类似asp.net webcontrol中的render的方法

2011-07-21 11:28 615 查看
在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封装成方法,这样就能提高代码的重用性,减少代码体积,也便于维护。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐