Как правило, конвертировать шаблон усов в JSON объект - PullRequest
0 голосов
/ 23 февраля 2020

При работе с 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.

...