Причина, по которой ваш шаблон не будет отображать значения x
или y
из вашего блока ifEqual
, заключается в том, что в контексте этого блока отсутствуют свойства x
или y
. Причина, по которой эти свойства отсутствуют в контексте, очень проста: это потому, что при вызове registerHelper
вы использовали выражение функции стрелки для определения вспомогательной функции.
Выражения функций стрелок , в дополнение к более компактному синтаксису, отличается от стандартных функциональных выражений. Важным отличием в этом случае является то, что они не имеют своего собственного this
контекста.
Когда вы вызываете registerHelper
, Handlebars свяжут вспомогательную функцию обратного вызова с контекстом данных шаблона, в данном случае это был бы объект: { x: 3, y: 3 }
. Однако это будет работать, только если вы используете обычное выражение функции в качестве обратного вызова и не выражение функции стрелки - поскольку выражение функции стрелки не может быть динамически связано с другим this
context.
Это означает, что вы должны использовать регулярное выражение функции в качестве аргумента для registerHelper
:
hbs.registerHelper('ifEqual', function (a, b, options) {
// Function body remains the same.
});
Чтобы лучше понять, что не так, вы можете console.log(this)
в вашем помощнике используйте оба типа выражений функций и сравните разницу.
Я создал скрипку , чтобы продемонстрировать разницу.