Вызов вспомогательству в шаблоне блока в руле
-
27-10-2019 - |
Вопрос
Я работаю с шаблоном руля.
{{#if itemSelected "SomeItem"}}
<div>This was selected</div>
{{/if}
куда itemSelected
это зарегистрированный помощник, как это:
Handlebars.registerHelper("itemSelected", function(item) {
var selected = false;
// Lots of logic that determines if item is selected
return selected;
});
Я получаю ошибки при попытке использовать этот синтаксис для шаблона, и я не могу найти ни одного примера, показывающего такие вещи. Я вижу простые блоки #если бы ...
{{#if myValueInContext}}
<div>This will show if myValueInContext results in a truthy value.</div>
{{/if}}
Но я не могу понять, как справиться с первым примером. Может быть, я подхожу к этому неправильно.
Кстати, я пометил эти усы, так как я не мог добавить тег руля к вопросу.
Решение
Я не думаю, что это сработает. Если я понимаю правильную документацию на руле, #IF является зарегистрированным блок-заседанием и не принимает другого зарегистрированного помощника в качестве аргумента.
Согласно документации, вы можете реализовать это так
Handlebars.registerHelper('ifItemSelected', function(item, block) {
var selected = false;
// lots of logic that determines if item is selected
if(selected) {
return block(this);
}
});
После этого вы сможете позвонить это с
{{#ifItemSelected SomeItem}}
This was selected
{{/ifItemSelected}
Но вы должны убедиться Какой -то имеет правильный формат. Я не вижу способа использовать зарегистрированный обработчик в качестве условного в случае IF.
Другие советы
Вы должны добавить скобки вокруг встроенного вспомогательного вызова:
{{#if (itemSelected "SomeItem")}}
<div>This was selected</div>
{{/if}
Я провел эксперименты и проверил, что это просто работает.
Не уверен, упоминается ли это в документации на руле. Я узнал трюк из примеров Руля-лаки.
С последней версией (1.0.rc.1) руля, вы должны написать STH, как:
Handlebars.registerHelper('ifItemSelected', function(item, options) {
var selected = false;
// lots of logic that determines if item is selected
if (selected) {
return options.fn(this);
}
});
т.е. Блок (это) заменяется Options.fn (это)
Если вы хотите иметь вариант и другой, вам понадобится этот код:
Handlebars.registerHelper('ifItemSelected', function(item, options) {
var selected = false;
// lots of logic that determines if item is selected
if (selected) {
return options.fn(this);
}
else {
return options.inverse(this);
}
});
Используется с:
{{#ifItemSelected SomeItem}}
This was selected
{{else}}
This was not selected
{{/ifItemSelected}