Template-more.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:4k
源码类别:

中间件编程

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.0.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ /**
  2.  * @class Ext.Template
  3.  */
  4. Ext.apply(Ext.Template.prototype, {
  5.     /**
  6.      * Returns an HTML fragment of this template with the specified values applied.
  7.      * @param {Object/Array} values The template values. Can be an array if your params are numeric (i.e. {0}) or an object (i.e. {foo: 'bar'})
  8.      * @return {String} The HTML fragment
  9.      * @hide repeat doc
  10.      */
  11.     applyTemplate : function(values){
  12. var me = this,
  13. useF = me.disableFormats !== true,
  14.          fm = Ext.util.Format, 
  15.          tpl = me;     
  16.     
  17.         if(me.compiled){
  18.             return me.compiled(values);
  19.         }
  20.         function fn(m, name, format, args){
  21.             if (format && useF) {
  22.                 if (format.substr(0, 5) == "this.") {
  23.                     return tpl.call(format.substr(5), values[name], values);
  24.                 } else {
  25.                     if (args) {
  26.                         // quoted values are required for strings in compiled templates,
  27.                         // but for non compiled we need to strip them
  28.                         // quoted reversed for jsmin
  29.                         var re = /^s*['"](.*)["']s*$/;
  30.                         args = args.split(',');
  31.                         for(var i = 0, len = args.length; i < len; i++){
  32.                             args[i] = args[i].replace(re, "$1");
  33.                         }
  34.                         args = [values[name]].concat(args);
  35.                     } else {
  36.                         args = [values[name]];
  37.                     }
  38.                     return fm[format].apply(fm, args);
  39.                 }
  40.             } else {
  41.                 return values[name] !== undefined ? values[name] : "";
  42.             }
  43.         }
  44.         return me.html.replace(me.re, fn);
  45.     },
  46.     /**
  47.      * <tt>true</tt> to disable format functions (defaults to <tt>false</tt>)
  48.      * @type Boolean
  49.      * @property
  50.      */
  51.     disableFormats : false,
  52.     /**
  53.      * The regular expression used to match template variables
  54.      * @type RegExp
  55.      * @property
  56.      * @hide repeat doc
  57.      */
  58.     re : /{([w-]+)(?::([w.]*)(?:((.*?)?))?)?}/g,
  59.     
  60.     /**
  61.      * Compiles the template into an internal function, eliminating the RegEx overhead.
  62.      * @return {Ext.Template} this
  63.      * @hide repeat doc
  64.      */
  65.     compile : function(){
  66.         var me = this,
  67.          fm = Ext.util.Format,
  68.          useF = me.disableFormats !== true,
  69.          sep = Ext.isGecko ? "+" : ",",
  70.          body;
  71.         
  72.         function fn(m, name, format, args){
  73.             if(format && useF){
  74.                 args = args ? ',' + args : "";
  75.                 if(format.substr(0, 5) != "this."){
  76.                     format = "fm." + format + '(';
  77.                 }else{
  78.                     format = 'this.call("'+ format.substr(5) + '", ';
  79.                     args = ", values";
  80.                 }
  81.             }else{
  82.                 args= ''; format = "(values['" + name + "'] == undefined ? '' : ";
  83.             }
  84.             return "'"+ sep + format + "values['" + name + "']" + args + ")"+sep+"'";
  85.         }
  86.         
  87.         // branched to use + in gecko and [].join() in others
  88.         if(Ext.isGecko){
  89.             body = "this.compiled = function(values){ return '" +
  90.                    me.html.replace(/\/g, '\\').replace(/(rn|n)/g, '\n').replace(/'/g, "\'").replace(this.re, fn) +
  91.                     "';};";
  92.         }else{
  93.             body = ["this.compiled = function(values){ return ['"];
  94.             body.push(me.html.replace(/\/g, '\\').replace(/(rn|n)/g, '\n').replace(/'/g, "\'").replace(this.re, fn));
  95.             body.push("'].join('');};");
  96.             body = body.join('');
  97.         }
  98.         eval(body);
  99.         return me;
  100.     },
  101.     
  102.     // private function used to call members
  103.     call : function(fnName, value, allValues){
  104.         return this[fnName](value, allValues);
  105.     }
  106. });
  107. Ext.Template.prototype.apply = Ext.Template.prototype.applyTemplate;