Я сделал немного LIB, который может сделать это, вы можете найти его на GitHub:
https://github.com/blauharley/TemplateJS
Вот пример того, что вы можете делать с ним:
var objs = [
{ dim: { x: 25, y:14, z: 3}, name: 'circle'},
{ dim: { x: 19, y:17, z: 8}, name: 'triangle'},
{ dim: { x: 7, y:44, z: 12}, name: 'quad'},
{ dim: { x: 13, y:63, z: 67}, name: 'circle'},
{ dim: { x: 5, y:23, z: -2}, name: 'rectangle'}
];
var templ = new TemplateJS();
// if you have got more than one value to insert separate the values with pipes (|)
var str = "<p>{name}: | <b style='color:green'>{dim}{x}px</b> | <b style='color:red'>{dim}{y}px</b> | <b style='color:yellow'>{dim}{z}px</b></p>";
templ.transformTemplate(objs,str);
Есть два метода, но transformTemplate подходит для вашего вопроса больше. Он возвращает массив строк, которые основываются на заданных объектах. Он принимает каждый объект (из objs-array) и помещает его значения свойств в строку, указанную как второй параметр. В конце transformTemplate возвращает массив преобразованный строки.
Второй способ insertTemplate делает почти то же самое, но считается, что он используется для вставки кучи значений в HTML-элементы.
С трубками | вы разделяете значения объектов, а фигурные скобки самоочевидны. Эта библиотека может обрабатывать бесконечные объекты-вложения (не массивы) гипотетически, как вы можете видеть в TestCase, выполненном с помощью Jasmine.
К сожалению, оба методы ожидает массив объектов, как первые пары поэтому, когда вы хотите использовать этот LIB, вы можете использовать его таким образом:
var source = {
'root':
{
'infos':
{
'sport': [
{
'name': 'tennis'
},
{
'name': 'basket'
}
]
}
}
};
var templ = new TemplateJS();
// if you have got more than one value to insert separate the values with pipes (|)
var str = '{name}';
templ.transformTemplate(source.root.infos.sport, str); // ["tennis", "basket"]
Кроме того, он тестируется во всех браузерах.
'root.sport.name' или' root.infos.sport.name'? – thefourtheye
Это можно сделать с помощью базового javascript, для чего вам нужна библиотека? – void
@thefourtheye 'root.infos.sport.name' извините. @void, как это можно сделать в базовом JS? – Yaman