String#interpolate uses Template#evaluate.
This Template realization makes some actions in constructor of
Template class instead of Template#evaluate.
So if you will use Template#evaluate many times for one Template
object, you will save a little time.

On Aug 12, 6:41 pm, Allen <bla...@gmail.com> wrote:
> You should use Strings interpolate function for this. A template is
> meant to be reused many times with many different filler values.
>
> On Jun 14, 10:41 am, Yaffle <vic99...@yandex.ru> wrote:
>
>
>
> > var Template = Class.create({
> >   initialize: function(template, pattern){
> >     var parts = template.toString().split(pattern ||
> > Template.Pattern),
> >         pl = parts.length,
> >         pattern2 = /^([^.\[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
>
> >     for(var i=1,k=1;i<pl;i+=4){
> >       var before = parts[i] || '',
> >          escaped = parts[i+1];
> >       if(before=='\\'){
> >         parts[k-1] += escaped;
> >       }else{
> >         parts[k-1] += before;
>
> >         var propList = [],
> >             expr  = parts[i+2],
> >             match = pattern2.exec(expr);
> >         while(match){
> >           propList.push( match[1].startsWith('[') ? match[2].replace(/\
> > \\\\]/g, ']') : match[1] );
> >           if(!match[3]){
> >             break;
> >           }
> >           expr = expr.substring('[' == match[3] ? match[1].length :
> > match[0].length);
> >           match = pattern2.exec(expr);
> >         }
>
> >         if(propList.length){
> >           parts[k]   = propList;
> >           parts[k+1] = parts[i+3];
> >           k+=2;
> >         }else{
> >           parts[k-1] += parts[i+3];
> >         }
>
> >       }
> >     }
> >     parts.length = k;
> >     this.parts = parts;
> >   },
> >   evaluate: function(object){
> >     if(Object.isFunction(object.toTemplateReplacements)){
> >       object = object.toTemplateReplacements();
> >     }
> >     object = object || '';
>
> >     var r = this.parts[0];
> >     for(var i=1,pl=this.parts.length;i<pl;i+=2){
> >       var propList = this.parts[i],
> >           ctx = object;
> >       for(var j=0,l = propList.length;j<l && ctx;j++){
> >         ctx = ctx[propList[j]];
> >       }
> >       r+= String.interpret(ctx)+this.parts[i+1];
> >     }
> >     return r;
> >   }});
>
> > Template.Pattern = /(^|.|\r|\n)(#\{([^\}]*)\})/;
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Prototype: Core" group.
To post to this group, send email to prototype-core@googlegroups.com
To unsubscribe from this group, send email to 
prototype-core-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/prototype-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to