gpt4 book ai didi

javascript - 更改模板标签后 John Resig 的微模板出现语法错误 <# {% {{ 等

转载 作者:数据小太阳 更新时间:2023-10-29 06:03:54 26 4
gpt4 key购买 nike

我在使用 John Resig 的 Micro 模板时遇到了一些麻烦。

谁能帮我解决为什么它不起作用?

这是模板

<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 似乎放在了错误的位置?除了将模板语法 block 从 <% %> 更改为 {% %} 之外,我没有做任何更改。

这是来自 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('');

最佳答案

要更改 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("\\'")

在引擎中更改正则表达式时要小心,您必须转义特殊字符。在正则表达式的 javascript 风格中,这些是:\/[ ] ( ) { } ? + * | . ^ $通过在它们前面加上“\”来转义它们。这不适用于拆分参数,因为在这种情况下它们不是正则表达式。

关于javascript - 更改模板标签后 John Resig 的微模板出现语法错误 <# {% {{ 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2649450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com