1

すべてのページで使用される jsRender テンプレートがいくつかあります。スクリプト タグ メソッドを使用する代わりに、それらをプリコンパイルして、結果の関数を外部 js ファイルに配置することをお勧めします。

これを尋ねる以前の質問を見ましたが、説明されている方法が機能していないように見えるか、何か間違ったことをしています。

msanjay が提案し、匿名関数をコピー/名前変更したコンソールから $.templates("#myTemplate") を呼び出し、次のようなものを取得しました (これは、私の訓練されていない目には少し奇妙に見えます)。

function myTemplate(data, view, j, b, u) {
    var j = j || jQuery.views, h = j.converters.html, ret; try {

        return "<div...";

    } catch (e) { return j._err(e); }
}

次に、 var html = $.render( data, myTemplate ); を呼び出してこのテンプレートを使用しようとすると、エラーが発生します:

キャッチされていない TypeError: オブジェクト関数 (a,b) のプロパティ 'render' {return new p.fn.init(a,b,c)} は関数ではありません

jsRender が変更されてこれができなくなったのか、それとも何か間違ったことをしているのかはわかりませんが、ガイダンスをいただければ幸いです。

4

2 に答える 2

0

前回の更新では、多くの API が変更されました。$.render今はただのようempty objectです。

このページを見てくださいテンプレートを事前にコンパイルするためのツールを提供すると、このデモが見つかります: JsRender: バリアントと詳細

たとえば、これを試すことができます:

var movies = [
    { name: "The Red Violin", releaseYear: "1998" },
    { name: "Eyes Wide Shut", releaseYear: "1999" },
    { name: "The Inheritance", releaseYear: "1976" }
];

var myTemplate = $.templates( "<div>{{:#index+1}}: <b>{{>name}}</b> ({{>releaseYear}})</div>" );
$("#movieList").html(myTemplate.render( movies));

デモ: http://jsfiddle.net/76nMC/

于 2012-10-27T19:33:06.927 に答える
0

文字列からテンプレートをコンパイルすることで、必要なものが得られる場合があります。簡単に言えば、次のようになります。

$.templates({
    myTemplateName: " blah blah {{>something}} blah "
});

var tempHtml = $.render.myTemplateName(myData);

実行時間を節約できるという考えで、プリコンパイルされたテンプレートを使用するという考えにとらわれているかもしれませんが、私の経験では、jsrender は非常に高速であるため、それに気付くことはありません。

于 2012-10-27T19:42:22.660 に答える