7

コンパイル済みの underscore.js テンプレートを使用したい。結果を使用_.template().sourceしてファイルに保存します。しかし、このテンプレートの使い方がわかりません。プリコンパイルされたテンプレートは文字列であり、関数にキャストできません。を使用しようとしましevalたが、常に解析エラーが返されます。

例えば:

<div>
    <% for(var i = 0; i < 5; i++){ %>
        <div><%=i%></div>
    <% } %>
</div>

標準使用:

_.template(tpl).({});

結果:

<div>

    <div>0</div>

    <div>1</div>

    <div>2</div>

    <div>3</div>

    <div>4</div>

</div>

プリコンパイル:

_.template(tpl).source

プリコンパイル済みテンプレート:

"function(obj){
var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
with(obj||{}){
__p+='<div>\n\t';
 for(var i = 0; i < 5; i++){ 
__p+='\n\t\t<div>'+
((__t=(i))==null?'':__t)+
'</div>\n\t';
 } 
__p+='\n</div>\n';
}
return __p;
}"

プリコンパイル済みテンプレートの実行:

var a = eval(tplc);
a({});

エラー:

Error
line: 1
message: "Parse error"
sourceId: 139746789246216
__proto__: SyntaxError
4

2 に答える 2

1

はい、source属性はコンパイルされたテンプレートを文字列として返します。その文字列を、次のような JavaScript オブジェクト リテラルを定義するファイルに書き込むことができます。

window.JST = { };
JST.some_name = function(obj){ ... };
// The rest of the compiled template functions go here

次に、それを他の JavaScript ファイルと同じようにブラウザーにロードすると、コンパイルされた一連のテンプレート関数がJST次のようになります。

var html = JST.some_name(data);

JSTもちろん、必要に応じて定義を構成できます。これは、全体的なアプローチを説明するための簡単な方法です。

文字列が他のテキストの塊のように操作される (ファイルへの書き込みなど) だけのテキストなのか、それとも JavaScript ソース コードなのかは、文字列を解釈する人によって異なることに注意してください。

于 2013-09-12T04:37:08.510 に答える