您可以使用微模板库,例如 Mustache,使用 {{ key }} 模板语法将传入的 JSON 对象解析为 HTML sn-ps。如果您的对象看起来像:
var myObj = {
name: 'Joe Smith',
age: 25,
features: {
hairColor: 'red',
eyeColor: 'blue'
}
};
使用 Mustache,您可以轻松地将其渲染为 HTML,使用 {{#}} 和 {{/}} 遍历嵌套对象:
Mustache.render('Hello, my name is {{name}} and I am {{age}} years old. {{#features}} I have {{hairColor}} hair and {{eyeColor}} eyes.{{/features}}', myObj);
哪个输出:
您好,我叫乔·史密斯,今年 25 岁。我有一头红头发和蓝眼睛。
编辑:更密切的应用程序 - 使用具有嵌套对象列表的模板动态生成控制面板。这是我的模板和对象(为清晰起见,将 HTML 分解为列表并加入):
var panel = [
'<div id="cpanel">',
'{{#cpanel}}',
'<div class="panel_section">',
'<h1 class="cpanel">{{name}}</h1>',
'<p>',
'{{#content}}',
'<button id="{{id}}">{{id}}</button>',
'{{/content}}',
'</p>',
'</div>',
'{{/cpanel}}',
'</div>',
].join('\n');
var panelObj = {
cpanel: [
{
name: 'playback',
content: [
{id: 'play'},
{id: 'pause'},
{id: 'stop'}
]
}, {
name: 'zoom',
content: [
{id: 'zoomIn'},
{id: 'zoomOut'}
]
}]
};
然后你用 Mustache 渲染:
Mustache.render(panel, panelObj);
哪个输出:
<div id="cpanel">
<div class="panel_section">
<h1 class="cpanel">playback</h1>
<p>
<button id="play">play</button>
<button id="pause">pause</button>
<button id="stop">stop</button>
</p>
</div>
<div class="panel_section">
<h1 class="cpanel">zoom</h1>
<p>
<button id="zoomIn">zoomIn</button>
<button id="zoomOut">zoomOut</button>
</p>
</div>
</div>