2015-09-22 1 views
0

Я сделал помощник шаблон под названием «$» в моей установке марионетокРули хелперов в {{}} #each итератор не работает

templateHelpers:function(){ 
    return jQuery.extend(this,{ 
     '$':function (text){ 
      return Handlebars.compile('{{'+text+'}}')(this); 
     } 
    }); 
}, 

это позволяет мне сделать это

{{$ collection.display}} 

, который будет разрешить collection.display, как правило, имя, но может быть другое имя поля, например service_id, и тогда мой обработчик разрешит это. Поэтому у меня есть окольные, и дешевле, чем печатать

{{{{collection.display}}}} 

Все хорошо. Только загвоздка в том, когда я придерживаюсь его внутри {{#each пунктов}} петли,

{{#each items}} 
       <option value="{{this.id}}">{{$ ../collection.display}} </option> 
{{/each}} 

она взрывается с

Error: Missing helper: "$" 

Обратите внимание, что это не имеет значения, что я ставлю после $, когда внутри блок {{$ ничего}} не сработает, помощника просто нет.

+0

Почему используется '../ collection.display'? особенно, почему двухточечная нотация? я думаю, что это проблема, в любом случае я не нахожу это очень полезным, если я не получу его для использования –

+0

вам понадобится .., чтобы добраться до родительского контекста, в котором коллекция доступна, я мог бы пойти @ ROOT. Это не проблема, поверьте мне. У меня есть шаблон, который я хочу использовать для нескольких таблиц, но поле, которое я хочу показать в списке выбора, отличается. Обычно это «имя», но я могу переопределить это в своей коллекции. или модели. –

+0

Да, хорошо, все же я думаю, что это проблема, как идти в корень внутри цикла в вашем помощнике, пытаться обнаружить двойную точку в вашем помощнике (или проверить, действительно ли она там передана) и действовать соответственно –

ответ

1

Это может быть проблема асинхронности. Тело блока итератора, похоже, скомпилировано до применения моих обработчиков. Во всяком случае, если я просто иду

Handlebars.registerHelper('$', function (text){ 
    return Handlebars.compile('{{'+text+'}}')(this); 
}); 

Перед тем, как начать объявляя любые мнения марионетка, то это работает, так что не уверен, если это считается ошибкой в ​​марионеток, рули или конечно меня.
Это дубликат Handlebar helper inside {{#each}}

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