国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Prototype Template對象 學習

2024-05-06 14:14:41
字體:
來源:轉載
供稿:網友
代碼如下:
var Template = Class.create({
//初始化方法
initialize: function(template, pattern) {
this.template = template.toString();
this.pattern = pattern || Template.Pattern;
},

//格式化方法,如果從java的角度來說,其實叫format更好 :)
evaluate: function(object) {
    //檢查是否定義了toTemplateReplacements方法,是的話調用
    //整個的Prototype框架中,只有Hash對象定義了這個方法
if (object && Object.isFunction(object.toTemplateReplacements))
object = object.toTemplateReplacements();

    //這里的gsub是String對象里面的方法,可以簡單的認為就是替換字符串中所有匹配pattern的部分
return this.template.gsub(this.pattern, function(match) {
//match[0]是整個的匹配Template.Pattern的字符串
     //match[1]是匹配字符串前面的一個字符
     //match[2]是匹配${var}這個表達式的部分
     //match[3]是'#{var}'表達式的'var'部分

     //如果object為null,則把所有的${var}表達式替換成''
if (object == null) return (match[1] + '');

     //取得匹配表達式前一個字符
var before = match[1] || '';
     //如果前一個字符串為'/',則直接返回匹配的表達式,不進行替換
if (before == '//') return match[2];

var ctx = object, expr = match[3];
     //這個正則表達式好像就是檢查var是否是合法的名稱,暫時沒看懂這個正則表達式的意義?
var pattern = /^([^.[]+|/[((?:.*?[^//])?)/])(/.|/[|$)/;
match = pattern.exec(expr);
     //如果var不符合要求,則直接返回前一個字符
if (match == null) return before;
//逐個替換'#{var}'表達式部分
while (match != null) {
         //不懂下面這個檢查什么意思?
var comp = match[1].startsWith('[') ? match[2].gsub('////]', ']') : match[1];
ctx = ctx[comp];
if (null == ctx || '' == match[3]) break;
expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
match = pattern.exec(expr);
}
     //返回替換后的結果,'#{var}' ==> 'value'
return before + String.interpret(ctx);
});
}
});
//默認的模板匹配正則表達式,形如#{var},很像JSP中的EL表達式
Template.Pattern = /(^|.|/r|/n)(#/{(.*?)/})/;

上面基本上把evaluate方法講了一遍,有些地方沒怎么看明白,那些正則表達式太難懂了。。。誰知道的告訴我?

下面看一下示例:
代碼如下:
var myTemplate = new Template('The TV show #{title} was created by #{author}.');

var show = {title: 'The Simpsons', author: 'Matt Groening', network: 'FOX' };

myTemplate.evaluate(show);
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 阿克| 家居| 宿松县| 磐安县| 菏泽市| 门源| 南昌县| 涿州市| 甘洛县| 灵璧县| 勐海县| 罗甸县| 大冶市| 融水| 丰镇市| 临泉县| 万安县| 霍州市| 平乡县| 昭苏县| 黄平县| 卓尼县| 平顶山市| 麻江县| 左云县| 赣榆县| 渝北区| 钦州市| 深州市| 奎屯市| 大竹县| 南丰县| 平山县| 腾冲县| 临朐县| 岳池县| 两当县| 类乌齐县| 清徐县| 类乌齐县| 亚东县|