/ / Не мога да вляза в елемента на масив след извикване на помощник (ръчни)

Няма достъп до масив елемент след повикване на помощник (Handlebars) - node.js, handlebars.js, helper

Регистрирах този помощник в моя файл с приложението:

hbs.registerHelper("if_greater", (a, b, opts) => {
if (a >= b) return opts.fn(this);
return opts.inverse(this);
});

След това в моя файл hbs:

{{#if_greater 20 occurrences}}
<tr class="danger">
<td>{{this.date}}</td>
<td>{{this.serial}}</td>
<td>{{this.operator}}</td>
<td>{{this.vehicle}}</td>
<td>{{this.stop}}</td>
<td>{{this.line}}</td>
<td>{{this.zone}}</td>
<td>{{this.occurrences}}</td>
<td>{{this.encrypted}}</td>
</tr>
{{/if_greater}}

Въпреки това, this.date не извежда нищо, нито се обажда date, Мога да го извеждам, ако не се обаждам на помощника си. Какво не е наред в помощника?

Отговори:

0 за отговор № 1

Ако някой срещне същия проблем, намерих заобиколно решение (и оставих помощника така, както е).

{{#each payload as |p|}} {{#if_greater 20 occurrences}}
<tr class="danger">
<td>{{p.date}}</td>
<td>{{p.serial}}</td>
<td>{{p.operator}}</td>
<td>{{p.vehicle}}</td>
<td>{{p.stop}}</td>
<td>{{p.line}}</td>
<td>{{p.zone}}</td>
<td>{{p.occurrences}}</td>
<td>{{p.encrypted}}</td>
</tr>

0 за отговор № 2

Проблемът е, че използвате стрелка функция израз а не функционален израз във вашия hbs.registerHelper обадете се. Важно е да се отбележи, че изразите на функцията стрелка са не просто нов начин за писане на функционални изрази; те се държат различно.

Съответната разлика в този случай е тази изрази на функцията стрелка Недей имат свои собствени this обект, Вместо това получават this на приложния им контекст на изпълнение.

Когато дефинирате помощник с кормила с старомоден израз на функция, например hbs.registerHelper("if_greater", function (a, b, opts) { /*...*/ });Управляващите кормила се грижат за това this в изпълнения помощник е текущият контекст във вашия шаблон. От документите:

Handlebars винаги извиква помощници с текущия контекст this, така че можете да извикате блока с this за оценка на блока в настоящия контекст.

Въпреки това, когато използвате израз със стрелка, this идва от лексикален обхват в която функцията е дефинирана. this може да бъде много неща, но това не мога да бъде контекстът на шаблона, който искате.

За хубаво обобщение на функциите на стрелките срещу функционалните изрази вижте: https://stackoverflow.com/a/34361380/3397771

За потвърждение, че помощникът работи според очакванията, когато е записан като функционален израз без стрелка, вижте това цигулка.