Dependency injection
Simple MVC Template
by edgardleal
HTML
<script type="text/template" id="template">
<span><b>{{cliente.codigo}}</b> - {{cliente.nome}}</span>
<div>
<table border="1">
<thead>
<tr><th>Código</th><th>Descrição</th></tr>
</thead>
<tbody>
{{#items}}
<tr>
<td>{{codigo}}</td>
<td>{{descricao}}</td>
</tr>
{{/items}}
</tbody>
</table>
</div>
</script>
JavaScript
function log(text){
console.log(text);
}
var DependencyControll = function(objects){
if(!objects) return;
this.objects = objects;
this.fillString = function(text, data){
if(!text || typeof text != "string") return;
var items = text.match(new RegExp("{{[\\w\\.]+}}", 'g'));
var data = data?data:this.objects;
for(var i in items){
if(items[i].indexOf('#')>-1) continue;
var obj = items[i].toString().replace('{{', '').replace('}}', '');
var value = eval('data.' + obj);
value = value?value:'';
text = text.toString().replace(items[i], value);
}
return text;
};
this.fillList = function(text){
if(!text || typeof text != "string") return;
var lists = text.match(new RegExp('{{#[\\w\\.]+}}', 'g'));
log('lists: ' + lists);
for(var i in lists){
var start = text.indexOf(lists[i]);
var endTag = lists[i].replace('#', '/');
var end = text.indexOf(endTag) + endTag.length;
var innerText = text.substring(start, end)
.replace(lists[i], '').replace(endTag, '');
var result = '';
var list = endTag.replace(/{{\/([\w\.]+)}}/, '$1');
log('innertext: '+ innerText);
log('list: '+ list);
for(var z in this.objects[list]){
log('Iteração nº ' + z + ', objecto: ' + this.objects[list][z]);
result += this.fillString(innerText, this.objects[list][z]);
}
text = text.replace(new RegExp(lists[i] + innerText + endTag),
result);
}
return text;
};
this.fillData = function(text){
return this.fillString(this.fillList(text));
};
this.ajax = function(url, text, callBack){
function run(value){
if(callBack && typeof callBack === "function")
...