.net JS模拟Repeater控件的实现代码
功能强大的模板引擎大都需要对模板进行语法解析,会有性能问题。通过把一个大的模板引擎根据不同呈现需求分隔成多个互相独立模板控件,可以降低处理复杂度提供处理性能,可以根据需求灵活组合这些模板控件得到一个可以定制的模板功能库。
JavaScript Repeater控件
代码 | 名称 | 最新价 | 涨跌额 | 涨跌幅 | 开盘 | 最高 | 最低 | 昨收 |
---|
代码 | 名称 | 最新价 | 涨跌额 | 涨跌幅 | 开盘 | 最高 | 最低 | 昨收 |
---|---|---|---|---|---|---|---|---|
{$dataRow[1]} | {$dataRow[2]} | {$dataRow[5]} | {$dataRow[17]} | {$dataRow[18]} | {$dataRow[4]} | {$dataRow[6]} | {$dataRow[7]} | {$dataRow[3]} |
//View
(function(ns){
function init(){
var container = document.getElementById("crossRate");
container.setAttribute("data-headertemplate", document.getElementById("crossRateHeader").text);
container.setAttribute("data-itemtemplate", document.getElementById("crossRateItem").text);
container.setAttribute("data-footertemplate", document.getElementById("crossRateFooter").text);
}
function render(dt){
var container = document.getElementById("crossRate"),
headerhtml = container.getAttribute("data-headertemplate"),
rowhtml = container.getAttribute("data-itemtemplate"),
footerhtml = container.getAttribute("data-footertemplate");
var repater = new Repater(headerhtml,rowhtml,footerhtml);
var dataRow = [];
for(var i=0,n=dt.length; i';
if (headerhtml) _this.header = headerhtml;
if (rowhtml) _this.row = rowhtml;
if (footerhtml) _this.footer = footerhtml;
_this.set = function(tag, val) {
this.dic[tag] = val;
};
_this.parse = function(dic) {
var row = this.row,
dic = dic || this.dic,
re = /\{\$(\w+)(?:\[(\d+)\])?(?:\|(\w+))?\}/g,
html;
html = row.replace(re, function(a, b, c, d) {
var val;
if (typeof dic[b] == "undefined"){
return b;
}
if (dic[b].constructor == Array) {
val = dic[b][c];
} else {
val = dic[b];
}
if (Repater[d] || window[d]) {//修饰符
val = (Repater[d] || window[d])(val);
}
return val;
});
_this.cache[n++] = html;
return html;
};
_this.toHTML = function(args) {
var cache = _this.cache,
result;
_this.cache = [];
n = 0;
result = _this.header + cache.join("") + _this.footer;
for (i in args) {
if (args.hasOwnProperty(i)) {
result = result.replace("{$"+i+"}", args[i]);
}
}
return result;
};
}
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]