Регистрирах този помощник в моя файл с приложението:
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
За потвърждение, че помощникът работи според очакванията, когато е записан като функционален израз без стрелка, вижте това цигулка.