21

ジョン・レシグによるJavaScriptマイクロテンプレートに関するこの投稿を見たので、このようなマイクロテンプレートエンジンが必要です。

しかし、彼は投稿の中で、JavaScript忍者の本の秘密に、より洗練されたバージョンを保持すると述べており、それが進化することを望んでいるとも述べています。

だから私は疑問に思っています、ジョン・レシグによるこのマイクロテンプレートエンジンのより安定した/高度なバージョンはありますか?もしそうなら、どうすれば入手できますか?そのJavaScriptの本は私の国では利用できません。

4

8 に答える 8

5

居住国に関係なく、@ Jamesが指摘しているように、PDFが公開されたらオンラインで間違いなく購入できます。

John Resigによるこのマイクロテンプレートエンジンのより安定した/高度なバージョンはありますか?

Rick Stahlのブログ(クライアントサイドテンプレートエンジンの束について)を参照してください。彼は、Resigのマイクロテンプレートエンジンの単一引用符に関する問題を修正しています。それは私が見たソースへの唯一の改善についてです。

于 2009-09-28T03:52:35.423 に答える
3

jQote2も参照してください。サイト自体から引用します:

jQote(スタートレックのChakoteyのように発音されます)は、基本的にJohnResigの素晴らしいJavaScriptマイクロテンプレートユーティリティを書き直したものです。私は彼のコードを取得してjQueryに移植し、解析/変換部分をオーバーホールし、その機能を拡張して、全員のコーディング作業を最小限に抑えました。

于 2011-09-30T17:16:00.587 に答える
2

jQueryプラグインを見てください

https://github.com/vkiryukhin/vkTemplate

これは、JohnResigのマイクロテンプレートエンジン上に構築されています。「一重引用符」の問題が修正され、プラグインのアーキテクチャに従ってエンジンがわずかに簡略化されました。

http://www.eslinstructor.net/vktemplate/のデモとドキュメント

于 2011-09-29T05:48:26.683 に答える
1

underscore.jsのテンプレート関数は、JohnResigのマイクロテンプレートエンジンに基づいています。http://documentcloud.github.com/underscore/#template

于 2012-01-26T16:49:22.757 に答える
1

http://www.manning.com/resig/にアクセスすると、次の本を見ることができるPDFを先行予約できます。

于 2009-09-28T03:41:55.650 に答える
1

シンプルなテンプレートエンジン...超小型..JohnResigsコードに基づいています...改良されています。わずか335バイトで非常に高速で、元のコードの多くのバグが修正されています。

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

于 2014-01-06T12:13:32.263 に答える
1

これはJohnResigの(わずかに変更された)スクリプトであり、Rick StrahlのWeb(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 に答える
0

私が行ったマイナーな改善/カスタマイズの1つは、テンプレートの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 に答える