# 훅(Hooks)

Handlebars 함수 호출에 훅을 걸 수 있는 여러 지점이 있습니다.

# helperMissing

이 훅은 머스태시 또는 블록 문이 아래와 같은 경우 호출됩니다.

  • 단순 머스태시 표현식이 등록된 도우미가 아닐 때
  • 현재 평가 컨텍스트의 속성이 아닐 때

이러한 상황에 대한 사용자 정의 처리를 추가하려면 helperMissing 도우미를 등록할 수 있습니다.

template
{{foo}}
{{foo true}}
{{foo 2 true}}
{{#foo true}}{{/foo}}
{{#foo}}{{/foo}}
preparationScript
Handlebars.registerHelper('helperMissing', function( /* dynamic arguments */) {
  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}}
output
  Yehuda Katz
마지막 업데이트: 2024. 6. 5. 오후 11:37:24