Вспомогательная функция блока 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/