2012-09-21 2 views
2

목록의 처음 세 항목을 인쇄한다고 가정 해 봅시다. 그래서 나는 먼저 목록에 splice을 쓰고 그 다음에 요소 위에 each을 쓰고 싶습니다. handlebars.js을 사용하여이 작업을 수행하는 가장 좋은 방법은 무엇입니까?핸들러의 헬퍼 또는 필터 데이터 js

가장 직관적 인 방법은 {{#each my_list|splice[0,3]}} 또는 {{#each splice my_list 0 3 }}이지만 핸들 바는 이러한 작업을 지원하지 않습니다.

다른 도우미를 연결하는 도우미를 생각해 내려면 어떻게해야합니까? (어떤 단계의 도우미가 추가 인수가 필요할 수 있음을 알고 있음)?

참고 :이 논리를 다른 위치로 옮기고 싶지 않습니다. 필자는 필자의 템플릿에서이 로직을 원한다고 가정 해 봅시다.

답변

0

당신은 당신의 자신의 도우미 추가 할 수 있습니다

Handlebars.registerHelper('spliced_each', function(a, from, to, block) { 
    var s = ''; 
    for(var i = from; i < to; ++i) 
     s += block(a[i]); 
    return s; 
}); 

을 한 다음 템플릿은 말할 수 :

{{#spliced_each my_list "2" "5"}} 
    ... 
{{/spliced_each}} 

데모 : 사용자 정의 헬퍼는 어떻게

핸들 바는 의도적으로 간단하다 http://jsfiddle.net/ambiguous/Zrd42/ 템플릿에 특별한 논리를 추가하십시오.

+0

그래, 실제로는 실제로는 '스플 라이스 (splice)'블록 도우미를 만들었고 보통의 '각'도우미를 감쌌습니다. 나는 왜 그렇게 간단한 것이지, 연쇄 함수가 많은 시나리오에서 진정으로 요구되는 이유는 모르겠다. –

+0

@GauravDadhania : 그들은 선을 어딘가에 그려야합니다. 선을 긋는 위치가 마음에 들지 않으면 다른 템플리트 시스템으로 전환하십시오. 분명히 옵션이 부족하지는 않습니다. –

+0

DustJS와 같은 좀 더 "더 똑똑한"언젠가는 동의합니다. 귀하의 답변을 주셔서 감사합니다 :) –

0

나는 이것에 대해 조금 연구를 해왔고, Handlebars에서 체인화 된 함수를 호출 할 가능성이 없다고 생각합니다. 그래도 도구의 확장 기능으로 재미있을 것 같습니다.

함수를 연결할 수 있도록 핸들 막대 도우미 함수를 만들 수 있습니다. 이 새로운 도우미를 사용하면 어떤 종류의 핸들 바 도우미 나 자신의 도우미를 조합하여 함수의 모든 결과를 다음 매개 변수의 매개 변수로 사용할 수 있습니다.

은 핸들 바의 환매 특약 문제에 보라 : Handlebars repo

가 여기에 수행 할 작업에 적합뿐만 아니라 핸들 바 헬퍼의 좋은 세트가 아닌이지만, 다른 작업 Handlebars Helpers에 도움이 될 수 있습니다