ホームページ  >  記事  >  ウェブフロントエンド  >  プロトタイプ テンプレート オブジェクト learning_prototype

プロトタイプ テンプレート オブジェクト learning_prototype

WBOY
WBOYオリジナル
2016-05-16 18:49:501590ブラウズ
コードをコピー コードは次のとおりです:

var Template = Class.create({
/ /初期化メソッド
initialize: function(template, pattern) {
this.template = template.toString();
this.pattern = pattern ||

//Java の観点から見ると、メソッドをフォーマットするため、実際には format と呼ぶ方が良いです :)
evaluate: function(object) {
//toTemplateReplacements メソッドが定義されているかどうかを確認し、定義されている場合は / / Prototype フレームワーク全体では、Hash オブジェクトのみがこのメソッドを定義します。
if (object && Object.isFunction(object.toTemplateReplacements))
object = object.toTemplateReplacements(); //ここで、gsub は String オブジェクト内のメソッドです。これは、パターンに一致する文字列のすべての部分を置き換えるものと単純に考えることができます。
return this.template.gsub(this.pattern, function(match) {
//match[0 ] は Template.Pattern に一致する文字列全体です
//match[1] は一致する文字列の前の文字です
//match[2] は式 $ に一致する部分です{var}
//match[3] は '#{var}' 式の 'var' 部分です

//オブジェクトが 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; by one
while (match != null) {
// 次のチェックの意味がわかりませんか?
var comp = match[1].startsWith('[') match[2] .gsub('\ \]', ']') : match[1];
ctx = ctx[comp];
if (null == ctx || '' == match[3]) ;
expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
match = pattern.exec(expr); }
/ / 置換された結果を返します、'#{var}' ==> 'value'
return before String.interpret(ctx);
}
} );
//デフォルトのテンプレートは、JSP
Template.Pattern = /(^|.|r|n)(#{ (.*? )})/;


上記は基本的にevaluateメソッドの説明ですが、正規表現が難しくてよく分からない部分がありました。 。 。誰が知っていて教えてくれるのでしょうか?

以下の例を見てください:



コードをコピーします


コードは次のとおりです:// -> テレビ番組「ザ・シンプソンズ」は、





コードをコピー

コードは次のとおりです:

コードをコピーします


コードは次のとおりです:

//カスタム マッチング パターンvar syntax = /(^|.|r|n)(<%=s*(w )s*% >)/; //「<%= field %>」のような記号と一致します。var t = new Template('
Name: <%=名前 %>、年齢: <%=age%>
'、構文);
t.evaluate( {名前: 'ジョン スミス'、年齢: 26 } );
// ->名前: ジョン スミス、年齢: 26 ;/div>



复制代码 代码如下:

var conversion1 = {from: 'meters', to: 'feet', factor: 3.28};
var conversion2 = {from: 'kilojoules', to: 'BTUs', factor: 0.9478};
var conversion3 = {from: 'megabytes', to: 'gigabytes', factor: 1024};

var templ = new Template('Multiply by #{factor} to convert from #{from} to #{to}.');

[conversion1, conversion2, conversion3].each( function(conv){ templ.evaluate(conv); });
// -> Multiply by 3.28 to convert from meters to feet.
// -> Multiply by 0.9478 to convert from kilojoules to BTUs.
// -> Multiply by 1024 to convert from megabytes to gigabytes.
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。