2015-10-12 4 views
1

Я использую марионетка и рули, и до сих пор я был в состоянии использовать следующий шаблон помощника просто отлично:Рули Помощники в {{}} каждый блок

templateHelpers: function(){ 
    return { 
     formatDate: function(dateString) { 
      var dateWithOffset = new Date(dateString); 
      var dateWithoutOffset = new Date(dateWithOffset.getTime() + dateWithOffset.getTimezoneOffset() * 1000 * 60); 
      return dateWithoutOffset.toLocaleDateString(); 
      } 
} 

Однако, когда я пытаюсь используйте его в моих .hbs внутри блока {{each}}, я получаю сообщение об ошибке.

{{#each mi.Comments}} 
    {{formatDate date}}</br> 
{{/each}} 

mi.Comments действительно имеет атрибут даты и если я удалить FormatDate, он отображает неформатированную дату должным образом для каждого комментария.

Здесь ошибка я получаю:

Uncaught Error: Missing helper: "formatDate" 

Любое руководство ценится. Это часть более крупного проекта с несколькими другими разработчиками, и я надеюсь не использовать метод HandleBars.registerHelper, поэтому мне не нужно изменять файл базового виджета.

ответ

2

Оказывается, когда блок {{#each}} изменяет контекст, он также изменяет контекст для вспомогательных функций. Этот код в .hbs работы:

{{#each mi.Comments}} 
    {{../formatDate date}}</br> 
{{/each}} 

«../» говорит Рули смотреть на родителя текущего контекста, который является, где вспомогательная функция находится.

+0

Хмммм, это интересно! Ну, я мог бы рассказать вам о синтаксисе «path», но я понятия не имел, что вы можете определить помощники Handlebars для конкретных представлений таким образом, но похоже, что это именно то, что вы сделали. Потрясающие. – Lambart

Смежные вопросы