Рули достигают пары ключ-значение в общем объекте контекста в другом объекте в #each
У меня есть шаблон, используемый Handlebars и мой контекст, как показано ниже:
var context = {
abc: ["a","b","c","d"],
xyz: {
words: {
a: 1,
b: 2,
c: 3,
d: 4
}
}
}
var template = Handlebars.compile(tpl);
var output = template(context);
Все хорошо, пока здесь. Но мне нужно сделать что-то вроде:
{{#each abc }}
<li><a data-toggle="tab" href="#{{ ../xyz.words[this] }}"> {{ this }} </a></li>
{{/each }}
Я ожидаю собрать значение, заданное ключом в контексте xyz.words, но ничего не получаю. Вместо этого, если я использую только {{ this }}
он работает нормально и возвращает значение из abc.
Что мне здесь не хватает?
Редактировать:
Кстати, я пытался использовать помощники, и вот что я сделал:
Handlebars.registerHelper("whatis", function(key){
return xyz.words[key];
});
{{#each abc }}
<li><a data-toggle="tab" href="#{{ whatis this] }}"> {{ this }} </a></li>
{{/each }}
1 ответ
Решение
Вам нужно создать помощника для доступа к объекту с помощью динамического ключа на основе переменных (пример выполнения):
Шаблон:
{{#each abc }}
<li>
{{#getObjectValue ../xyz.words key=this}}
<a data-toggle="tab" href="#{{this}}">
{{/getObjectValue}}
{{ this }} </a>
</li>
{{/each }}
Код:
Handlebars.registerHelper('getObjectValue', function(object, options) {
return options.fn(object[options.hash.key]);
});
var template = Handlebars.compile($("#template").html());
$("#target").html(template(context));