>  기사  >  웹 프론트엔드  >  프로토타입 템플릿 객체 학습_prototype

프로토타입 템플릿 객체 학습_prototype

WBOY
WBOY원래의
2016-05-16 18:49:501632검색
코드 복사 코드는 다음과 같습니다.

var Template = Class.create({
/ /초기화 방법
초기화: 함수(템플릿, 패턴) {
this.template = template.toString();
this.pattern = 패턴
},

//Formating 메소드는 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 패턴 = /^([^.[] |[((?:.*?[^\])?)])(.|[|$)/
match = 패턴.exec( expr);
//var가 요구 사항을 충족하지 않으면 이전 문자를 직접 반환합니다.
if (match == null) return
//'#{var}' 표현식 부분 1을 바꿉니다. 하나씩
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 = 패턴.exec(expr); }
/ /대체된 결과 반환, '#{var}' ==> 'value'
String.interpret(ctx) 이전 반환
}
} );
//기본 템플릿은 JSP
Template.Pattern = /(^|.|r|n)(#{의 EL 표현식과 유사하게 #{var} 형식의 정규 표현식과 일치합니다. (.*? )})/;


위에서는 평가 방법에 대해 기본적으로 설명했지만, 일부 정규식은 이해하기가 너무 어렵습니다. . . 누가 알고 알려 주나요?
아래 예시를 보세요.



코드를 복사하세요 코드는 다음과 같습니다.var myTemplate = new Template('TV 쇼 #{title}은 #{author}에 의해 제작되었습니다.')
var show = {title: 'The Simpsons', 저자: 'Matt Groening', 네트워크: 'FOX' };

myTemplate.evaluate(show)
// -> The Simpsons는




코드 복사 코드는 다음과 같습니다.var t = new Template('in #{lang } 또한 템플릿에는 \#{ 변수} 구문을 사용합니다.')
var data = {lang:'Ruby', Variable: '(사용되지 않음)'}
// -> Ruby에서는 템플릿에 #{variable} 구문도 사용합니다.




코드 복사 코드는 다음과 같습니다.//사용자 지정 일치 패턴
var 구문 = /(^|.|r|n)(<%=s*(w )s*% >)/;

//'<%= 필드 %>'와 일치합니다.
var t = new Template('
이름: <%= 이름 %>, 연령: <%=age%>
', 구문)

t.evaluate( { 이름: 'John Smith', 나이: 26 } )
// ->
이름: John Smith, 나이: 26 ;/div>



复aze代码 代码如下:

var Conversion1 = {from: 'meters' , to: '피트', 인자: 3.28};
var Conversion2 = {from: '킬로줄', to: 'BTU', 인수: 0.9478};
var Conversion3 = {from: '메가바이트', to: '기가바이트', 인수: 1024};

var templ = new Template('#{from}에서 #{to}로 변환하려면 #{factor}를 곱하세요.');

[변환1, 변환2, 변환3].each( function(conv){ templ.evaluate(conv); });
// -> 미터를 피트로 변환하려면 3.28을 곱하세요.
// -> 킬로줄을 BTU로 변환하려면 0.9478을 곱하세요.
// -> 메가바이트를 기가바이트로 변환하려면 1024를 곱하세요.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.