所以我在John Resig的JavaScript Micro-Templating上看过这篇文章,我需要一个像这样的微模板引擎。
但是他在帖子中说,他将在他的秘密书中保留一个更精致的版本,并提到他希望看到它的演变。
所以我想知道,John Resig是否有更稳定/更高级的微型模板引擎?如果是这样,我怎样才能获得它?这本JavaScript书籍在我的国家/地区不可用。
答案 0 :(得分:5)
无论您居住的国家/地区如何,您都可以在@James指出的时候在线购买pdf。
是否更稳定/更先进 这个微模板的版本 John Resig引擎?
请参阅Rick Stahl's blog(在一堆客户端模板引擎上),他在Resig的Micro-Templating引擎中修复了单引号的问题。这是我见过的源头的唯一改进。
答案 1 :(得分:3)
另见jQote2。 我将引用该网站本身:
jQote(发音像Star Trek的Chakotey)基本上是对John Resig令人敬畏的JavaScript Micro-Templating实用程序的重写。我拿了他的代码并将其移植到jQuery,对解析/转换部分进行了全面检查,并扩展了它的功能,以最大限度地减少每个人的编码工作。
答案 2 :(得分:2)
看一下jQuery插件
https://github.com/vkiryukhin/vkTemplate,
基于John Resig的微模板引擎。 修复了“单引号”问题,根据插件的架构稍微简化了引擎。
上的演示和文档答案 3 :(得分:1)
如果您转到http://www.manning.com/resig/,可以预订PDF,以便查看即将出版的图书。
答案 4 :(得分:1)
underscore.js中的模板函数基于John Resig的微模板引擎。 http://documentcloud.github.com/underscore/#template
答案 5 :(得分:1)
简单模板引擎......超小......基于John Resigs代码......有所改进。 只有335字节,速度快,原始代码中存在大量错误。
答案 6 :(得分:1)
这是John Resig的(稍加修改)脚本,来自Rick Strahl的网页(http://weblog.west-wind.com/posts/2008/Oct/13/Client-Templating-with-jQuery)
var _tmplCache = {}
this.tmpl= function(str, data) {
/// <summary>
/// Client side template parser that uses <#= #> and <# code #> expressions.
/// and # # code blocks for template expansion.
/// NOTE: chokes on single quotes in the document in some situations
/// use &rsquo; for literals in text and avoid any single quote
/// attribute delimiters.
/// </summary>
/// <param name="str" type="string">The text of the template to expand</param>
/// <param name="data" type="var">
/// Any data that is to be merged. Pass an object and
/// that object's properties are visible as variables.
/// </param>
/// <returns type="string" />
var err = "";
try {
var func = _tmplCache[str];
if (!func) {
var strFunc =
"var p=[],print=function(){p.push.apply(p,arguments);};" +
"with(obj){p.push('" +
// 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('');";
str.replace(/[\r\t\n]/g, " ")
.replace(/'(?=[^#]*#>)/g, "\t")
.split("'").join("\\'")
.split("\t").join("'")
.replace(/<#=(.+?)#>/g, "',$1,'")
.split("<#").join("');")
.split("#>").join("p.push('")
+ "');}return p.join('');";
//alert(strFunc);
func = new Function("obj", strFunc);
_tmplCache[str] = func;
}
return func(data);
} catch (e) { err = e.message; }
return "< # ERROR: " + err.htmlEncode() + " # >";
}
它可以像这样使用: tmpl($(&#39; myHtmlTempl&#39;)。html(),data);
我对它进行了测试,并使用&#34;单引号&#34; (这是我的主要问题,直到我找到这个)。 此版本已准备好与&lt; ##&gt;一起使用标签
答案 7 :(得分:0)
我所做的一个小改进/自定义是允许在模板ID中使用连字符。使用原始代码,将无法使用:
<script type="text/html" id="my-awesome-template">
<!-- template contents -->
</script>
它实际上只是尝试对字符串“ my-awesome-template”进行模板化,显然它将返回“ my-awesome-template”。
要解决此问题,我在第9行左右的位置修改了正则表达式
var fn = !/\W/.test(str) ?
到以下:
var fn = !/[^a-zA-Z0-9_-]/.test(str) ?