21

所以我看到了 John Resig 关于JavaScript 微模板的这篇文章,我需要一个像这样的微模板引擎。

但他在帖子中表示,他将在他的 JavaScript 忍者秘密一书中保留一个更完善的版本,并提到他希望看到它的发展。

所以我想知道,John Resig 的这个微模板引擎是否有更稳定/高级的版本?如果是这样,我怎样才能获得它?那本 JavaScript 书在我的国家/地区不可用。

4

8 回答 8

5

正如@James 指出的那样,无论您居住在哪个国家/地区,您都可以在线购买 pdf。

John Resig 的这个微模板引擎有更稳定/更高级的版本吗?

请参阅Rick Stahl 的博客(关于一堆客户端模板引擎),其中他修复了 Resig 的微模板引擎中的单引号问题。这是我见过的对源代码的唯一改进。

于 2009-09-28T03:52:35.423 回答
3

另见jQote2。我将引用该网站本身:

jQote(发音像 Star Trek 的 Chakotey)基本上是对 John Resig 出色的 JavaScript 微模板实用程序的重写。我把他的代码移植到 jQuery 中,彻底检查了解析/转换部分并扩展了它的功能,以尽量减少每个人的编码工作。

于 2011-09-30T17:16:00.587 回答
2

看看 jQuery 插件

https://github.com/vkiryukhin/vkTemplate ,

它建立在 John Resig 的微模板引擎之上。修复了“单引号”问题,并根据插件的架构稍微简化了引擎。

演示和文档位于http://www.eslinstructor.net/vktemplate/

于 2011-09-29T05:48:26.683 回答
1

underscore.js 中的模板函数基于 John Resig 的微模板引擎。http://documentcloud.github.com/underscore/#template

于 2012-01-26T16:49:22.757 回答
1

简单的模板引擎……超小……基于 John Resigs 代码……经过改进。只有 335 字节,速度极快,并且修复了原始代码中的许多错误。

https://github.com/leolems/javascript/tree/master/templates

于 2014-01-06T12:13:32.263 回答
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 &lt;#= #&gt; and &lt;# code #&gt; expressions.
/// and # # code blocks for template expansion.
/// NOTE: chokes on single quotes in the document in some situations
///       use &amp;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($('myHtmlTempl').html(), data);

我对其进行了测试,它适用于“单引号”(在我找到这个之前,这是我的主要问题)。此版本已准备好使用 <# #> 标记。

于 2014-12-14T22:01:06.523 回答
1

如果您访问http://www.manning.com/resig/,您可以预订 PDF 以查看即将出版的书籍。

于 2009-09-28T03:41:55.650 回答
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) ?
于 2019-12-31T17:19:24.953 回答