Как передать {{@index}} как значение аргумента с handlebars js

У меня есть шаблон Handlebar (фактически шаблон Mustache) как

Вот контекст данных, который я использую.

var generateThumbnails = {
 "available": [
 "Ruby",
 "Javascript",
 "Python",
 "Erlang",
 "more"
 ],

 coordx : function () {
 return someValue;
 }
 };

На лету я создаю left css margin as coordx с функцией coordx.

В шаблоне я хочу передать {{@index}} который используется для создания левого поля (который не работает). Как объясняется при вызове функции с аргументами в усах javascript

Как передать индекс, чтобы получить значение маржи?

2 ответа

если вы пытаетесь использовать индекс в своей функции, вы захотите пойти:

<pre class="prettyprint linenums"><code>coordx : function (index) {
 var item = index;

 if(item == 0){
 return('15px');
 } else {
 return('30px');
 };
}</code>

это даст:

<code>&lt;div&gt;
 Test Index is 0
&lt;/div&gt;

&lt;div&gt;
 Test Index is 1
&lt;/div&gt;</code>


Недопустимый синтаксис для ручек

Если вы используете Handlebars (трудно сказать из своего сообщения), чтобы перебирать массивы, используйте помощник {{#each}}.

Инвалид:

{{#available}}
 ... 
{{/available}}

Действительно:

{{#each available}}
 ... 
{{/each}}

Зарегистрировать помощника ручек

Чтобы передать @index функции и выполнить некоторую операцию перед ее возвратом, зарегистрируйте специальный помощник выражения в вашем JS файле вместо передачи функции в модели JSON. В Handlebars функции не ожидаются в контексте JSON.

Helper:

// Expression Helper
// Return index multiplied by 10 appended with 'px' unit.
Handlebars.registerHelper('coordx', function (index) {
 return (index * 10) + 'px';
});

Заключительный шаблон:

{{#each available}}
 <div>
 Index {{@index}}: {{this}}
 </div>
{{/each}}

Вот рабочий скрипт JS: http://jsfiddle.net/gfullam/L5jrq3dp/

licensed under cc by-sa 3.0 with attribution.