关于John Resig的“JavaScript Micro-Templating”的任何进展?

时间:2009-09-28 03:24:58

标签: javascript templating-engine

所以我在John Resig的JavaScript Micro-Templating上看过这篇文章,我需要一个像这样的微模板引擎。

但是他在帖子中说,他将在他的秘密书中保留一个更精致的版本,并提到他希望看到它的演变。

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

8 个答案:

答案 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的微模板引擎。  修复了“单引号”问题,根据插件的架构稍微简化了引擎。

http://www.eslinstructor.net/vktemplate/

上的演示和文档

答案 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字节,速度快,原始代码中存在大量错误。

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

答案 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 &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($(&#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) ?