훅(Hooks)
Handlebars 함수 호출에 훅을 걸 수 있는 여러 지점이 있습니다.
helperMissing
이 훅은 머스태시 또는 블록 문이 아래와 같은 경우 호출됩니다.
- 단순 머스태시 표현식이 등록된 도우미가 아닐 때
- 현재 평가 컨텍스트의 속성이 아닐 때
이러한 상황에 대한 사용자 정의 처리를 추가하려면 helperMissing
도우미를 등록할 수 있습니다.
template {{foo}}
{{foo true}}
{{foo 2 true}}
{{#foo true}}{{/foo}}
{{#foo}}{{/foo}}
preparationScript Handlebars.registerHelper('helperMissing', function( ) {
var options = arguments[arguments.length-1];
var args = Array.prototype.slice.call(arguments, 0,arguments.length-1)
return new Handlebars.SafeString("Missing: "+options.name+"("+args+")")
})
output Missing: foo()
Missing: foo(true)
Missing: foo(2,true)
Missing: foo(true)
이 도우미는 모든 사용자 정의 도우미 또는 블록 도우미와 동일한 인수 및 옵션(hash
, name
등)을 받습니다.
options.name
은 호출된 도우미의 이름입니다.
기본 동작
머스태시에 매개 변수가 전달되지 않으면 기본 동작은 아무것도 하지 않고 전체 머스태시 표현식 또는 전체 블록을 무시하는 것
입니다:
template some_{{foo}}mustache
some_{{#foo}}abc{{/foo}}block
output some_mustache
some_block
머스태시에 매개 변수가 전달되면 Handlebars는 예외를 발생시킵니다:
template {{foo bar}}
{{#foo bar}}abc{{/foo}}
error Missing helper: "foo"
blockHelperMissing
이 훅은 다음과 같은 경우 호출됩니다:
- 블록 표현식이 등록되지 않은 도우미를 호출하지만
- 그 이름이 현재 평가 컨텍스트의 속성과 일치하는 경우
이 상황을 처리하려면 blockHelperMissing이라는 헬퍼를 등록할 수 있습니다.
template {{#person}}
{{firstname}} {{lastname}}
{{/person}}
preparationScript Handlebars.registerHelper('blockHelperMissing', function(context, options) {
return "Helper '"+options.name+"' not found. "
+ "Printing block: " + options.fn(context);
});
output Helper 'person' not found. Printing block: Yehuda Katz
기본 동작
훅은 현재 컨텍스트에서 해결된 속성 값과 options.name
필드가 속성 이름으로 설정된 상태로 호출됩니다.
훅이 재정의되지 않으면 기본 구현은 Mustache의 동작을 모방하여 블록을 호출합니다.
template {{#person}}
{{firstname}} {{lastname}}
{{/person}}