var data = [{
id: 1,
subdata: { x: 10, y: 20 }
}, {
id: 2,
subdata: { x: 20, y: 30 }
}];
var tpl = new Ext.XTemplate([
'<ul>',
'<tpl for=".">',
'<li>ID: <span class="raw">{id}</span> or ',
'<span class="fmt">{["#" + this.pad(values.id, 3, "0")]}</span></li>',
'<ul>',
'<tpl for="subdata">',
'<li>x: <span class="raw">{x}</span> or ',
'<span class="fmt">{[this.frmtUnits(values.x)]}</span></li>',
'<li>y: <span class="raw">{y}</span> or ',
'<span class="fmt">{[this.frmtUnits(values.y)]}</span></li>',
'</tpl>',
'</ul>',
'</tpl>',
'</ul>',
{
pad : function(s, n, c) {
if (typeof s !== 'string') s = '' + s;
return Math.abs(n) <= s.length ? s : this.pad(n > 0 ? c + s : s + c, n, c);
},
frmtUnits : function(v) {
return v + 'px';
}
}
]);
Ext.onReady(function () {
new Ext.Panel({
autoHeight: true,
html: tpl.apply(data),
layout: 'fit',
style: { padding: '2px', margin: '2px' },
renderTo: Ext.getBody()
});
});
ul li {
line-height: 1.67em;
}
li span {
font-weight: bold;
}
li span.raw {
color: #D44;
}
li span.fmt {
color: #44D;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/extjs/4.2.1/ext-all-debug.js"></script>