Синтактична грешка с микро шаблоните на John Resig след промяна на етикетите на шаблона ‹# {% {{ и т.н.

Имам малко проблеми с Micro шаблоните на John Resig.

Може ли някой да ми помогне защо не работи?

Това е шаблонът

<script type="text/html" id="row_tmpl">
test content {%=id%} {%=name%}
</script>

И модифицираната част на двигателя

str
      .replace(/[\r\t\n]/g, " ")
      .split("{%").join("\t")
      .replace(/((^|%>)[^\t]*)'/g, "$1\r")
      .replace(/\t=(.*?)%>/g, "',$1,'")
      .split("\t").join("');")
      .split("%}").join("p.push('")
      .split("\r").join("\\'")
  + "');}return p.join('');");

и javascript

var dataObject = { "id": "27", "name": "some more content" };
var html = tmpl("row_tmpl", dataObject);

и резултатът, както виждате =id и =name изглежда са на грешното място? Освен че промених блоковете за синтаксис на шаблона от ‹% %> на {% %}, не съм променил нищо.

Това е от Firefox.

Error: syntax error
Line: 30, Column: 89
Source Code:
var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push(' test content ');=idp.push(' ');=namep.push(' ');}return p.join('');

person Chris Barry    schedule 15.04.2010    source източник
comment
Наистина се обърках, когато стигнах до думите, модифицираната част на двигателя.   -  person Pointy    schedule 16.04.2010


Отговори (2)


Когато сте модифицирали двигателя, сте забравили да промените тези редове:

  .replace(/((^|%>)[^\t]*)'/g, "$1\r")
  .replace(/\t=(.*?)%>/g, "',$1,'")

до това:

  .replace(/((^|%\})[^\t]*)'/g, "$1\r")
  .replace(/\t=(.*?)%\}/g, "',$1,'")
person James    schedule 15.04.2010

За да промените таговете в библиотеката с микрошаблони на John Resig, трябва да промените две извиквания split() и двата регулярни израза от оригиналния код.

Например, промяната на оригиналните тагове ‹%= %> на {{= }} се извършва по следния начин

//ORIGINAL
str
  .replace(/[\r\t\n]/g, " ")
  .split("<%").join("\t")              //CHANGE string "<%"
  .replace(/((^|%>)[^\t]*)'/g, "$1\r") //CHANGE expression /((^|%>)[^\t]*)'/g
  .replace(/\t=(.*?)%>/g, "',$1,'")    //CHANGE expression /\t=(.*?)%>/g
  .split("\t").join("');")             
  .split("%>").join("p.push('")        //CHANGE string "%>"
  .split("\r").join("\\'")

//INTO
str
  .replace(/[\r\t\n]/g, " ")
  .split("{{").join("\t")                //INTO string "{{"
  .replace(/((^|\}\})[^\t]*)'/g, "$1\r") //INTO expression /((^|\}\})[^\t]*)'/g
  .replace(/\t=(.*?)\}\}/g, "',$1,'")    //INTO expression /\t=(.*?)\}\}/g
  .split("\t").join("');")
  .split("}}").join("p.push('")          //INTO string "}}"
  .split("\r").join("\\'")

Бъдете внимателни, когато променяте регулярните изрази в двигателя, трябва да избегнете специални знаци. Във варианта на regexp в javascript това са: \ / [ ] ( ) { } ? + * | . ^ $ Избягайте от тях, като поставите пред тях "\". Това не се отнася за параметрите за разделяне, тъй като в този случай те не са регулярен израз.

person alexandru.topliceanu    schedule 29.12.2011