Как использовать несколько параметров в помощнике руля с метеором?

Я пытаюсь создать собственный помощник, используя Meteor. Следуя документу здесь: https://github.com/meteor/meteor/wiki/Handlebars

Я попытался определить своего помощника следующим образом:

Template.myTemplate.testHelper = function(foo, bar, options) {
    console.log(foo);
    console.log(bar);
}

Мой шаблон выглядит так:

<template name="myTemplate">
    {{#testHelper "value1" "value2"}}
    {{/testHelper}}
</template>

Глядя на вывод моей консоли, я ожидал увидеть 2 строки вывода:

value1
value2

Однако моя консоль выглядит так:

value1
function (data) {
    // don't create spurious annotations when data is same
    // as before (or when transitioning between e.g. `window` and
    // `undefined`)
    if ((data || Handlebars._defaultThis) ===
        (old_data || Handlebars._defaultThis))
      return fn(data);
    else
      return Spark.setDataContext(data, fn(data));
  } 

Обратите внимание, я совершенно новичок в метеорах и рулях. Я думаю, что я был бы намного счастливее, используя подчеркивание, но документация для метеора почти полностью перекрывает подчеркивание. Я делаю что-то неправильно, определяя свою вспомогательную функцию? Кажется, что он не видит второй параметр «бар», а вместо этого интерпретирует его как параметры. (Примечание: если я использую console.log(options), он возвращает «неопределенное»).

Метеор версия 0.4.0 (8f4045c1b9)


person Greg    schedule 24.09.2012    source источник


Ответы (2)


Ваша логика хороша, просто внесите некоторые изменения в шаблон

<template name="myTemplate">
  {{testHelper "value1" "value2"}}
</template>

Имейте в виду, что функция testHelper определена только в шаблоне myTemplate.

Если вы хотите зарегистрировать testHelper глобально, вам нужно сделать что-то вроде этого

Handlebars.registerHelper('testHelper', function(foo, bar){
  console.log(foo);
  console.log(bar);
});

Повеселись

person Rui Gonçalves    schedule 24.09.2012
comment
Это недопустимо, если вам нужен помощник по стилю {{#if}} Content {{/if}}. - person Donflopez; 10.09.2013
comment
можно комбинировать помощников в таком сценарии: {{#if testHelper "v1" "v2"}} some Template {{/if}} - person Matanya; 05.10.2013
comment
Куда поставить Handlebars.registerHelper? - person basickarl; 02.10.2015
comment
@KarlMorrison — вы можете разместить его в любом месте, где запускается клиентский код. Я, например, обычно помещаю его в myApp/client/lib/helpers/template-helpers.js Кроме того, в более новых версиях Meteor вы захотите зарегистрировать каждого отдельного помощника отдельно, используя этот синтаксис: Template.registerHelper('myHelperName', function(arg1, arg2) { [...] });. Вам не нужно ни во что оборачивать этот код, просто поместите его в ваш template-helper.js в виде отдельных фрагментов кода с большим количеством пробелов между каждым из этих фрагментов для удобочитаемости. ;) - person WizzyBoom; 20.11.2015

Дополнение к

<template name="myTemplate"> {{testHelper "value1" "value2"}} </template>

Вместо того, чтобы передавать значение в качестве параметра, передайте функцию в качестве параметра Вот код для этого

<template name="myTemplate">
    {{ testHelper1 (testHelper2 "value2") }}
</template>

ваше здоровье!!!!!

person mad Man    schedule 31.08.2017