Handlebars는 헬퍼가 리턴한 값을 기본적으로 HTML Escape하지만, 헬퍼가 return할 때 이를 SafeString
객체로 감싸서 리턴하면 HTML Escape을 하지 않는다. 물론, 해당 Escape에 대한 보안 책임은 헬퍼를 만든 프로그래머가 져야한다.
handlebars.registerHelper("blog-list", new Helper<List<Blog>>() { public CharSequence apply(List<Blog> list, Options options) { String ret = "<ul>"; for (Blog blog: list) { ret += "<li>" + options.fn(blog) + "</li>"; } return new Handlebars.SafeString(ret + "</ul>"); } });
precompile
과 embedded
사용.com.github.jknack.handlebars.Options
의 fn
객체에서 현재 템플릿 위치에 대한 정보를 얻을 수 있다.options.fn.text()
: helper 문자열 자체options.fn.filename()
: 템플릿 파일options.fn.position()[0]
: 현재 호출 위치 line number.options.fn.position()[1]
: 현재 호출 위치 column number.
{{#each}}
같은 블럭 컨텍스트는 인자로 받은 객체를 새로운 컨텍스트로 만드는데, {{#each}}
가 중첩해서 나오고, 상위 컨텍스트와 하위 컨텍스트에 동일 프라퍼티가 있을 경우 상위 컨텍스트 프라퍼티 접근이 어려울 수 있다.
이때는 ../propertyName
를 사용하면 상위 컨텍스트 프라퍼티에 접근 가능하다.
Handlebars 3.x 부터는 block 의 컨텍스트에 명시적으로 이름 지정이 가능해져서 상위 컨텍스트와의 이름 충돌 회피가 더 쉬워졌다.
index
에 숫자 대입{{people.[index]}}
{{#each array}} {{@index}}: {{this}} {{/each}}
{{#each object}} {{@key}}: {{this}} {{/each}}