Base
from : http://handlebarsjs.com/reference.html
Handlebars.compile(template, options)
template 을 컴파일 하는 작업은 다음과 같이 수행하면 즉시 수행된다.var template = Handlebars.compile('{{foo}}');
template({});
- template : 를 수행할때 어떻게 수행할지에 대한 다양한 옵션들이 다음과 같이 있다.
- data : false로 설정하면 @data 트래킹을 disable한다.
- compat : true로 설정하면 recursive 필드 룩업을 수행한다.
- knownHelpers : Hash로 헬퍼의 리스트를 포함하고 있다. 이는 템플릿이 실행되는 타임에 존재하는지 파악하게 된다. 이때 이 값을 전달하면 옵티마이즈된 결과로 컴파일러가 컴파일한다. 내부 헬퍼는 자동적으로 포함되어진다. 값을 false로 설정하는 것으로 제거 할 수 있다.
- knownHelpersOnly : true로 설정하면 알려진 헬퍼의 리스트를 기반으로 최적화 한다.
- noEscape : true로 설정하면 어떠한 내용도 escape하지 않는다.
- strict : strict모드로 실행한다. 이 모드에서는 템플릿은 유실된 필드에 대해서 무시하지 않고 오류를 던진다. 이것은 {{^foo}}{{/foo}} 와 같은 inverse오퍼레이션을 disable하는 사이드 이펙트가 있다. 그렇지 않으면 소스 객체내에서 명시적으로 포함된다.
- assumeObjects : path를 트래버싱 할때 체크된 객체를 제거한다. 이는 strict모드의 서브셋이며, 데이터 입력들이 안전하다고 판단되면 옵티마이즈된 템플릿을 생성한다.
- preventIndent : 기본적으로 인덴트된 partial콜을 수행한다. 이는 pre태그를 patial이 작성할때 기대하지 않는 행동을 하는 것을 막아준다. 이 옵션을 true로 지정하면 auto-indent 기능이 disable된다.
- ignoreStandalone : true로 지정하면 standalone태그를 제거하는 작업을 disable하게 한다. block과 partial에 설정하면 이는 해당 라인에서 공백을 제거하지 않는다.
- explicitPartialContext : partial을 위한 컨텍스트를 disable한다. enabled된 경우 partial은 컨텍스트 값이 전달되지 않으며 비어있는 객체로 실행이 된다.
Handlebars.precompile(template, options)
주어진 템플릿을 precompile한다. 이를 통해서 클라이언트에 전달하게 되면 클라이언트는 컴파일 없이 수행된다.var templateSpec = Handlebars.precompile('{{foo}}');이는 Handlebars.compile에서 제공하는 모든 옵션을 이용할 수 있다. 추가적으로 다음 값을 전달할 수 있다.
- srcName : 입력 파일을 위한 소스 맵을 생성하기 위해 전달한다. 이 방법으로 수행이 되면 반환되는 구조는 {code, map}으로 code에는 템플릿 정의가, map에는 소스 맵이 들어간다.
- destName : 선택적인 파라미터로 srcName과 결합된다. 이는 소스 맵을 생성할때 목적지 파일 이름을 제공한다.
Handlebars.template(templateSpec)
Handlebars.precompile와 함께 precompile된 템플릿을 설정한다.
var template = Handlebars.template(templateSpec);
template({});
Handlebars.registerPartial(name, partial)
environment 에서 특정 템플릿에 의해 접근 가능한 partial을 등록한다.Handlebars.registerPartial('foo', partial);
또한 한번에 복수개의 partial을 등록할 수 있다.
Handlebars.registerPartial({전체 라이브러리가 모두 로딩되면 partial은 필요한경우 컴파일 될 것이다. 만약 실행타임에 로딩하는 경우라면 partial은 사전에 컴파일된 템플릿 이어야한다. 이는 Handlebars.template 메소드를 이용하여 적절하게 설정할 수 있다.
foo: partial,
bar: partial
});
Handlebars.unregisterpartial(name)
이전에 등록한 partial을 등록 해제한다.Handlebars.unregisterPartial('foo');
Handlebars.registerHelper(name, helper)
environment에서 특정 템플릿에 의해서 접근할 수 있는 헬퍼를 등록한다.Handlebars.registerHelper('foo', function() {또한 복수개의 헬퍼를 한번에 등록할 수 있다.
});
Handlebars.registerHelper({
foo: function() {
},
bar: function() {
}
});
Handlebars.unregisterHelper(name)
사전에 등록된 헬퍼를 등록 해제한다.Handlebars.unregisterHelper('foo');
Handlebars.registerDecorator(name, helper)
environment에서 특정 템플릿에서 접근이 가능한 decorator를 등록한다.Handlebars.registerDecorator('foo', function() {또한 한번에 decorator를 여러개 등록할 수 있따.
});
Handlebars.registerDecorator({
foo: function() {
},
bar: function() {
}
});
Handlebars.unregisterDecorator(name)
이전에 등록된 decorator를 해제한다.Handlebars.unregisterDecorator('foo');
Handlebars.SafeString(string)
template가 렌더된경우 스트링이 escape되는 것을 막는다.new Handlebars.SafeString('<div>HTML Content!</div>')스트링이 생성될때 safe로 마크된다. 다른 외부 컨텐츠는 handlebars.escapeExpression메소드를 이용하여 escape된다. 이는 잠재적인 보안적인 문제를 회피한다.
Handlebars.escapeExpression(string)
전달된 스트링의 HTML을 escape한다. 이는 HTML컨텐츠에서 text렌더링시 안전하게 수행한다.Handlebars.Utils.escapeExpression(string)
&
, <
, >
, "
, '
, `
, =
상기 엔티티는 적합한 값으로 변경이 된다. SafeString 값은 수정되지 않고 남아 있는다.
triple braced 표현식 {{{ }}} 을 제외하고 모든 표현식은 이 메소드를 통과하게 되어 있다. 추가적으로 헬퍼들은 이 메소드를 이용하여 SafeString 을 통과한 HTML컨텐츠를 안전하게 처리한다. 이는 code injection 가능성을 막아준다.
이 메소드는 Handlebars.Utils.escapeExpression 로 alias되어 있다.
Handlebars.createFrame(data)
block helper에 의해서 사용되며, 자식 데이터 객체를 생성한다.if (options.data) {헬퍼들은 데이터 스테이트를 변경하며 이때 새로운 프레임을 생성한다. 이때 그 자체로 고립된 상태로 그리고 다른 부모의 상태를 깨트리지 않고자 하는경우 새로운 프레임을 생성한다. 일반적으로 하나의 헬퍼가 수행될때 오직 하나의 프레임만 생성될 필요가 있다. each iterator은 오직 하나의 프레임을 생성하며 이는 모든 자식들이 수행될때 재사용 된다.
var data = Handlebars.createFrame(options.data);
data.foo = 'bar';
options.data = data;
}
Handlebars.create()
고립된 핸들바스 환경을 생성한다.var OtherHandlebars = Handlebars.create();각 환경은 자신의 헬퍼들과 partials를 가진다. 이것은 구별되는 헬퍼와 partials가 필요한 케이스에서 사용하기 위해 필요하다. 대부분의 유즈케이스는 root Handlebars 환경을 직접적으로 사용할 수 있다.
주어진 환경에 대해서 생성된 템플릿은 해당 환경에 연결이 된다. 이 의미는 복수의 환경에서 수행될 필요가 있는 템플릿들은 Handlebars.template 를 이용하여 매 환경마다 새롭게 컴파일하고 생성되어야할 필요가 있다는 의미이다. 이것은 partial에도 동일하게 적용된다.
Handlebars.noConflict()
Handlebars 인스턴스를 글로벌 스페이스에서 제거하고, 이전에 등록되어진 다른 라이브러리를 저장한다.var myHandlebars = Handlebars.noConflict();이는 버젼 충돌에 대한 고민없이 글로벌에 로드된 라이브러리의 구분되는 버젼을 이용하도록 해준다.
Handlebars.log(level, message)
log헬퍼에 의해서 로거 기능을 사용하도록 해준다.필요하다면 오버라이드 된다.
Utilities
Handlebars는 다양한 유틸리티 메소드를 제공하며 Handlebars.Utils객체를 통해서 사용가능하다.Handlebars.Utils.isEmpty(value)
주어진 값이 비어있는지 확인한다.Handlebars.Utils.isEmpty(value)이는 if와 with헬퍼에서 사용되며 해당 컨틀로 플로우를 결정하기 위해 사용된다. Handlebar의 empty에 대한 정의는 다음과 같다.
- 길이가 0인 배열
- false성격의 값이나 0
Handlebars.Utils.extend(obj, value)
단순한 유틸리티 메소드로 아규먼트 obj 객체에 특정 키와 값으로 구성된 value를 적용한다.Handlebars.Utils.extend(foo, {bar: true})이는 객체 foo에 키가 bar인 값을 세팅하며 그 값은 true이다.
Handlebars.Utils.toString(obj)
일반적인 toString메소드이다.Handlebars.Utils.isArray(obj)
객체가 배열인지 검사한다.Handlebars.Utils.isFunction(obj)
객체가 함수인지 검사한다.@data Variable
다음 @data 변수는 Handlebars와 내장된 헬퍼에 의해서 구현되었다.@root
초기화된 컨텍스트로 템플릿이 수행된 것이다.{{#each array}}명시적으로 변경하지 않는한 이 값은 모든 페이지 렌더링에서 일관적으로 동작한다. 이 의미는 사용된 partials가 depth로된 파라미터를 통해서 그들의 부모 템플릿을 참조 할 수 없다는 것이다.
{{@root.foo}}
{{/each}}
@first
각 iteration이 첫번째 엘리먼트인경우에만 해당 헬퍼가 수행된다.{{#each array}}
{{#if @first}}
First!
{{/if}}
{{/each}}
@index
0기반의 인덱스이며 이는 현재 스텝의 인덱스를 나타난다. 이는 each헬퍼에 의해서 설정한다.{{#each array}}
{{@index}}
{{/each}}
@key
현재 반복 스텝의 엘리먼트의 키 이름을 나타낸다. 이는 each헬퍼에 의해서 설정된다.{{#each array}}
{{@key}}
{{/each}}
@last
each헬퍼에 의해서 설정하며 iteration스텝의 마지막 스텝을 의미한다.{{#each array}}
{{#if @last}}
Last :(
{{/if}}
{{/each}}
@level
로그 레벨을 할당한다.template({}, {data: {level: Handlebars.logger.WARN}})로그레벨은 다음과 같다.
- Handlebars.logger.DEBUG
- Handlebars.logger.INFO
- Handlebars.logger.WARN
- Handlebars.logger.ERROR
로거를 통한 로그 출력은 Handlebars.logger.level에 설정된 값 이상인경우에 출력된다.
기본값은 error모드로 설정된다.
EmoticonEmoticon