2012-03-13 3 views
15

Я пытаюсь написать условный вспомогательный оператор if для Handlebars.js. По сути, я хочу поместить «активный» класс в ссылку, если это страница Apply Now.Условный помощник "if statement" для Handlebars.js

Helper:

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> 

Но, я получаю очень скелетное JavaScript ошибка:

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

Ahh duh, я попробую это немного, когда вернусь к этой стороне приложения. Благодаря! – wart

+0

Thats it! Спасибо, kaptron. – wart

1

Примечание: блок (это) в помощнике больше не будет работать. Вместо этого используйте block.fn (это)

например.

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

 Смежные вопросы

  • Нет связанных вопросов^_^