Chr*_*rry 5 javascript ajax jquery dom template-engine
我在使用John Resig的Micro模板时遇到了一些麻烦.
任何人都可以帮我解释为什么它不起作用?
这是模板
<script type="text/html" id="row_tmpl">
test content {%=id%} {%=name%}
</script>
Run Code Online (Sandbox Code Playgroud)
和引擎的修改部分
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('');");
Run Code Online (Sandbox Code Playgroud)
和JavaScript
var dataObject = { "id": "27", "name": "some more content" };
var html = tmpl("row_tmpl", dataObject);
Run Code Online (Sandbox Code Playgroud)
和结果,你可以看到= 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('');
Run Code Online (Sandbox Code Playgroud)
要更改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("\\'")
Run Code Online (Sandbox Code Playgroud)
在改变引擎中的正则表达式时要小心,你必须逃避特殊的特征.在正则表达式的javascript风格中,这些是:\/[](){}?+*| .^ $通过在前面添加"\"来逃避它们.这不适用于拆分参数,因为在这种情况下它们不是正则表达式.
当您修改引擎时,您忘记更改这些行:
.replace(/((^|%>)[^\t]*)'/g, "$1\r")
.replace(/\t=(.*?)%>/g, "',$1,'")
Run Code Online (Sandbox Code Playgroud)
对此:
.replace(/((^|%\})[^\t]*)'/g, "$1\r")
.replace(/\t=(.*?)%\}/g, "',$1,'")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1306 次 |
| 最近记录: |