Условный помощник "if statement" для Handlebars.js
Я пытаюсь написать условный, если оператор справки для Handlebars.js. По сути, я хочу поместить "активный" класс в ссылку, если это страница Apply Now
.
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
Может ли кто-нибудь увидеть, если я пишу это неправильно?
Спасибо!
Ссылки:
Вызов помощника в рамках шаблона блокировки ручек
http://thinkvitamin.com/code/handlebars-js-part-2-partials-and-helpers/
Ответы
Ответ 1
Я вижу одну небольшую ошибку синтаксиса, которая, по моему мнению, может быть проблемой. Если вы собираетесь использовать вспомогательный элемент, который принимает блок, вам нужно закрыть его с помощью имени помощника. Посмотрите, как я заменил {{/if}}
на {{/isApplyNow}}
следующим образом:
{{#isApplyNow}}
<a href="{{url}}" class ='active'>{{this.title}}</a>
{{else}}
<a href="{{url}}">{{this.title}}</a>
{{/isApplyNow}}
Ответ 2
Примечание:
block (this) в помощнике больше не будет работать. Вместо этого используйте block.fn(this)
например.
Handlebars.registerHelper('isApplyNow', function(block) {
if (this.title === "Apply Now")
return block.fn(this);
else
return block.inverse(this);
});