Подтвердить что ты не робот

Как передать параметры помощнику Handlebars? Какая разница между options.hash и options.data

Здесь типичный помощник Handlebers:

Ember.Handlebars.helper 'myHelper', (value, options) ->
  ...

В соответствии с этот протап вы можете передать хеш хелперам Handlebars. Я просмотрел источник и выяснил, что он предоставляет как options.hash, так и options.data. Я немного смущен, так как это не сработает, как ожидалось:

{{#with controllers.currentCardCategory}}
  {{#each property in cardProperties}}
    <td class="td">{{cardProperty this property=property.symbol}}</td> 
  {{/each}}
{{/with}}

this - текущая запись Card. Здесь я получил property.symbol как строку

Но это сработало:

{{#with controllers.currentCardCategory}}
  {{#each property in cardProperties}}
    <td class="td">{{cardProperty this property.symbol}}</td> 
  {{/each}}
{{/with}}

и значение было доступно через options.

Но теперь я не могу этого сделать:

{{#with controllers.currentCardCategory}}
  {{#each property in cardProperties}}
    <td class="td">{{cardProperty this property.symbol anotherParam yetAnotherParam}}</td> 
  {{/each}}
{{/with}}

Мой вопрос: передать другие параметры помощнику и , что разница между options.hash и options.data в помощнике?

4b9b3361

Ответ 1

Параметры, переданные помощнику, становятся arguments вспомогательной функции. Значения, которые вы предоставляете в шаблоне сразу после {{helperName, становятся аргументами. Последним аргументом, переданным помощнику, является объект options, который предоставляет дополнительную информацию для вспомогательных, таких как, options.hash и options.contexts, и т.д. Пара ключей значений, предоставляемых после того, как параметры соответствуют свойству options.hash.

Для a hello помощника, который принимает 3 аргумента, хелпер будет,

Ember.Handlebars.helper('hello', function(a, b, c, options) {
  return '%@ - %@ - %@'.fmt(a, b, c);
});

Помощник hello может использоваться в шаблоне, например,

{{hello lorem ipsum dolor}}

Здесь значения свойств lorem, ipsum и dolor будут использоваться и возвращаться как комбинированная строка.

В дополнение к требуемым аргументам, если вы передадите дополнительные параметры, они будут доступны в options.hash. Эти свойства рассматриваются как строки и не разрешаются по умолчанию. Вам нужно будет использовать options.data.view для поиска своих значений. См. Этот ответ для примера, если вам нужно это сделать.

Наконец options.data - это специальное свойство, предоставляемое помощникам. Это raw handlebars Frame, который содержит переменные, контексты и т.д. Это в основном для использования с блочными помощниками. Поскольку блок-помощники не выполняют рендеринг самостоятельно, а вызывают другие помощники, options.data позволяет таким блочным помощникам вводить дополнительные переменные в кадр дочерних помощников. Подробнее см. В документах здесь.

Здесь приведен пример jsbin.