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")
               ...