Синтаксическая ошибка в Micro Templating Джона Резига после изменения тегов шаблона ‹# {% {{ и т. д.

У меня небольшие проблемы с шаблонами 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('');");

и джаваскрипт

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

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

Это из фаерфокса.

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

Чтобы изменить теги в библиотеке микрошаблонов Джона Резига, вы должны изменить два вызова 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("\\'")

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

person alexandru.topliceanu    schedule 29.12.2011