2012-03-13 3 views
15

Handlebars.js에 조건부 if 문 헬퍼를 쓰려고합니다. 본질적으로, 내가 Apply Now 페이지 인 경우 링크에 "활성"클래스를 넣고 싶습니다.Handlebars.js에 대한 조건부 "if 문"도우미

도우미 :

Handlebars.registerHelper('isApplyNow', function(block) { 
    if(this.title == "Apply Now") { 
     return block(this); 
    } else { 
     return block.inverse(this); 
    } 
    }); 

그리고 템플릿 :

<ul> 
    {{#each pages}} 
     <li> 
     {{#isApplyNow}} 
      <a href="{{url}}" class ='active'>{{this.title}}</a> 
     {{else}} 
      <a href="{{url}}">{{this.title}}</a> 
     {{/if}} 
     </li> 
    {{/each}} 
    </ul> 

는하지만, 자바 스크립트 오류가 매우 빈약 무엇입니까 :

Uncaught [object Object] in handlebars-1.0.0.beta.2.js:595 
내가 쓰고있는 경우

사람이 볼 수 이것은 부적절한가?

감사합니다.

참조 된 기사 :

Calling Helper Within If Block in Handlebars Template

http://thinkvitamin.com/code/handlebars-js-part-2-partials-and-helpers/

답변

20

나는이 문제가 될 수 있으리라 생각 하나 사소한 문법 실수를 참조 할. 블록을 사용하는 도우미를 사용하려는 경우 도우미 이름으로 도우미를 닫아야합니다. 내가 대체 한 방법 {{/if}}과 같이 {{/isApplyNow}}와 참조 :

{{#isApplyNow}} 
     <a href="{{url}}" class ='active'>{{this.title}}</a> 
    {{else}} 
     <a href="{{url}}">{{this.title}}</a> 
    {{/isApplyNow}} 
+0

아허, 나는 앱의 측면으로 돌아 가면 조금만 시도 할 것입니다. 감사! – wart

+0

그게 전부 야! Kaptron에게 감사드립니다. – wart

1

참고 : 블록 (이) 헬퍼에서 더 이상 작동하지 않습니다. 대신 block.fn (this)을 사용하십시오.

예 :

Handlebars.registerHelper('isApplyNow', function(block) { 
    if (this.title === "Apply Now") 
     return block.fn(this); 
    else 
     return block.inverse(this); 
});