Вспомогательная функция блока handlebarjs (простой нечетный четный атрибут, добавляемый в каждую строку массива) с requirejs

Я включил handlebarjs в свое магистральное приложение requirejs и хотел реализовать определение помощника класса строк (odd|even) в шаблонах,

Я пытаюсь "портировать" встроенный помощник руля на модуль (requirejs): http://blog.teamtreehouse.com/handlebars-js-part-2-partials-and-helpers

с плагином handlebarjs для requirejs: https://github.com/SlexAxton/require-handlebars-plugin

Вот тот, который я получил до сих пор oddevenhelper.js:

define(['handlebars'], function ( Handlebars ){
  function oddevenhelper(array, even, odd, fn, elseFn) {
      if (array && array.length > 0) {
        var buffer = "";
        for (var i = 0, j = array.length; i < j; i++) {
            var item = array[i];

            // we'll just put the appropriate stripe class name onto the item for now
            item.stripeClass = (i % 2 == 0 ? even : odd);

            // show the inside of the block
            buffer += fn(item);
        }

        // return the finished buffer
        return buffer;
      } else {
        return elseFn();
      }
  };

  Handlebars.registerHelper( 'oddevenhelper', oddevenhelper );
  return oddevenhelper;
});

и это мой образец шаблона:

<div class="orderssummary-list">
        {{#oddevenhelper orderssummary "even" "odd"}}
            <div class="ordersummary-list-item {{stripeClass}}">
                <a class="addone"><i class="icon-chevron-up icon-white"></i></a>
                <a class="minusone"><i class="icon-chevron-down icon-white"></i></a>
                <div class="item-quantity">{{quantity}}x</div><div class="item-name">{{item_name}}</div> {{total}}
                <div class="clearfix">
            </div>
        {{/oddevenhelper}}
    </div>

Помощник запускается, но руль вызывает ошибку, я думаю, для 3-го или 4-го параметра, который я объявил в шаблоне, не определено или нет вообще.

Я что-то упустил по этому поводу? Или я просто позволю переопределить контекст (orderssummary), чтобы включить классы строк?

1 ответ

Решение

Помощники Hbs определяются именно как обычные помощники Handlebars: они получают шаблон и обратные функции в хэше параметров, а не в качестве обычных аргументов. Ваша функция должна выглядеть

function oddevenhelper(array, even, odd, options)
    var fn = options.fn,
        elseFn = options.inverse;

    ...
}

и скрипка http://jsfiddle.net/snZHu/

Другие вопросы по тегам