Roo/XTemplate.js
authorAlan Knowles <alan@akbkhome.com>
Fri, 6 Apr 2012 15:40:43 +0000 (23:40 +0800)
committerAlan Knowles <alan@akbkhome.com>
Fri, 6 Apr 2012 15:40:43 +0000 (23:40 +0800)
Roo/XTemplate.js

index ce240d7..c389da5 100644 (file)
  */
 Roo.XTemplate = function(){
     Roo.XTemplate.superclass.constructor.apply(this, arguments);
-    var s = this.html;
-
-    s = ['<tpl>', s, '</tpl>'].join('');
-
-    var re = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;
-
-    var nameRe = /^<tpl\b[^>]*?for="(.*?)"/;
-    var ifRe   = /^<tpl\b[^>]*?if="(.*?)"/;
-    var execRe = /^<tpl\b[^>]*?exec="(.*?)"/;
-    var m, id = 0;
-    var tpls = [];
-
-    while(m = s.match(re)){
-       var m2 = m[0].match(nameRe);
-       var m3 = m[0].match(ifRe);
-       var m4 = m[0].match(execRe);
-       var exp = null, fn = null, exec = null;
-       var name = m2 && m2[1] ? m2[1] : '';
-       if(m3){
-           exp = m3 && m3[1] ? m3[1] : null;
-           if(exp){
-               fn = new Function('values', 'parent', 'with(values){ return '+(Roo.util.Format.htmlDecode(exp))+'; }');
-           }
-       }
-       if(m4){
-           exp = m4 && m4[1] ? m4[1] : null;
-           if(exp){
-               exec = new Function('values', 'parent', 'with(values){ '+(Roo.util.Format.htmlDecode(exp))+'; }');
-           }
-       }
-       if(name){
-           switch(name){
-               case '.':  name = new Function('values', 'parent', 'with(values){ return values; }'); break;
-               case '..': name = new Function('values', 'parent', 'with(values){ return parent; }'); break;
-               default:   name = new Function('values', 'parent', 'with(values){ return '+name+'; }');
-           }
-       }
-       tpls.push({
-            id: id,
-            target: name,
-            exec: exec,
-            test: fn,
-            body: m[1]||''
-        });
-       s = s.replace(m[0], '{xtpl'+ id + '}');
-       ++id;
-    }
-    for(var i = tpls.length-1; i >= 0; --i){
-        this.compileTpl(tpls[i]);
-    }
-    this.master = tpls[tpls.length-1];
-    this.tpls = tpls;
+  
 };
 
 
@@ -69,6 +18,63 @@ Roo.extend(Roo.XTemplate, Roo.Template, {
 
     re : /\{([\w-\.]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,
 
+    
+    preCompile: function()
+    {
+        var s = this.html;
+     
+        s = ['<tpl>', s, '</tpl>'].join('');
+    
+        var re = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;
+    
+        var nameRe = /^<tpl\b[^>]*?for="(.*?)"/;
+        var ifRe   = /^<tpl\b[^>]*?if="(.*?)"/;
+        var execRe = /^<tpl\b[^>]*?exec="(.*?)"/;
+        var m, id = 0;
+        var tpls = [];
+    
+        while(m = s.match(re)){
+           var m2 = m[0].match(nameRe);
+           var m3 = m[0].match(ifRe);
+           var m4 = m[0].match(execRe);
+           var exp = null, fn = null, exec = null;
+           var name = m2 && m2[1] ? m2[1] : '';
+           if(m3){
+               exp = m3 && m3[1] ? m3[1] : null;
+               if(exp){
+                   fn = new Function('values', 'parent', 'with(values){ return '+(Roo.util.Format.htmlDecode(exp))+'; }');
+               }
+           }
+           if(m4){
+               exp = m4 && m4[1] ? m4[1] : null;
+               if(exp){
+                   exec = new Function('values', 'parent', 'with(values){ '+(Roo.util.Format.htmlDecode(exp))+'; }');
+               }
+           }
+           if(name){
+               switch(name){
+                   case '.':  name = new Function('values', 'parent', 'with(values){ return values; }'); break;
+                   case '..': name = new Function('values', 'parent', 'with(values){ return parent; }'); break;
+                   default:   name = new Function('values', 'parent', 'with(values){ return '+name+'; }');
+               }
+           }
+           tpls.push({
+                id: id,
+                target: name,
+                exec: exec,
+                test: fn,
+                body: m[1]||''
+            });
+           s = s.replace(m[0], '{xtpl'+ id + '}');
+           ++id;
+        }
+        for(var i = tpls.length-1; i >= 0; --i){
+            this.compileTpl(tpls[i]);
+        }
+        this.master = tpls[tpls.length-1];
+        this.tpls = tpls;
+    
+    
     applySubTemplate : function(id, values, parent){
         var t = this.tpls[id];
         if(t.test && !t.test.call(this, values, parent)){