При работе с Mustache или любым движком шаблонов, правильно структурированный объект JSON необходим для визуализации определенного шаблона c. Как правило (я полагаю), разработчик знает модель данных своего приложения и то, как он хочет отображать данные в шаблоне, но обнаруживает, что их модель данных не совсем выводит JSON в форме, которую ожидают их шаблоны. Поэтому нам часто приходится писать функции обработки данных, которые преобразуют выходные данные модели данных в допустимые входные данные шаблона усов.
Например, приложение @ Liang выводит JSON массив вроде:
"prop":{"brands":["nike","adidas","puma"]}
но его шаблон ожидает, что он будет иметь вид:
"brands":[{"name":"nike"},{"name":"adidas"},{"name":"puma"}]
, поэтому ему нужно преобразовать его с помощью:
var data = {brands: obj.prop['brands'].map(function(x){ return {name: x}; })};
Лян также мог бы настроить свой шаблон , чтобы он работал без шага преобразования данных. Но что, если я не знаю, что это за шаблон, и моя единственная гарантия шаблона заключается в том, что его теги разрешают ключи в моей модели данных. Можно ли написать функцию bridge(data_model, template)
, которая принимает в качестве входных данных модель данных и шаблон усов и выводит функцию преобразования Transform
. Так, что Transform
сам по себе является кодом, который массирует выходные данные модели данных в допустимые входные данные шаблона усов.
Сказал иначе, если
data_model = "prop":{"brands":["nike","adidas","puma"]}
и
template = {{#brands}}
<b>{{name}}</b>
{{/brands}}
то, что bridge
производит javascript
{brands: obj.prop['brands'].map(function(x){ return {name: x}; })}
= bridge(data_model, template)
(выход bridge
будет быть javascript код).
Я понимаю, что это может быть слишком непринужденно, чтобы дать хороший ответ, но я думаю, что каждый может признать, что как минимум bridge
должен иметь возможность выводить вложенные команды for loops
или map
, Как я мог go сделать, возможно, грубую версию bridge
с for loop
командами в нужных местах, соответствующих тегам усов? .. извините, если это не имеет большого смысла, это сложный вопрос для меня красноречивый. Честно говоря, это похоже на просьбу о магии c.