2012-01-26 10 views
2

私は、サーバー側でnode.js/ejsを使用し、クライアント側でbackbone.jsを使用します。 サーバーサイドとクライアントサイドの両方が同じテンプレートスタイルを使用します。 問題は、クライアント用のテンプレートコードをテンプレート内に置くと、それはまだサーバー側で解析されます。node.jsのEJSテンプレートコードをエスケープしてクライアント側で評価するにはどうすればよいですか?

この作品のようなものことが判明した場合:

<%- "<%= done ? 'done' : '' %\>" %> 

しかし、私見これは無用のテンプレートを使用しての全体のポイントを作る方法でコードをuglifies。

これにどのようにアプローチしますか?

他のテンプレート言語で使用されている{literal}タグのように解析されないEJSテンプレート内にコードブロックを定義する方法はありますか?

更新:今のところ、私はバックボーンの_.templateSettingsを使用して、クライアント側で異なる区切り文字を使用しています。

更新:はここにJSPのコンテキストで同様のソリューションです:Underscore.js Templates Within JSP

+0

テンプレートのテンプレートは間違っているように聞こえます。 – Raynos

答えて

2

私がこれを扱ったのは、ノードの開始タグと終了タグをオーバーライドして、ejの2つのインスタンスが異なるタグを探すようにすることです。ノードで

は、あなたは私の二つのバージョンのための<%と< @を使い、私の場合は

{open:'<%',close:'%>'} 

オプション

に渡すことができます。私は私のテンプレートが正確になりたいので、

<% if(everyauth.loggedIn) %><h1><@= name @></h1><% } %> 
0

まあ、私は現在、これに近づく方法は、テキストプラグインでrequire.jsを使用することです。これにより、開発時にAJAXを使用してテンプレートをインクルードし、デプロイ時にそれらをすべて最適化/単一化された単一のファイルバンドルにコンパイルすることができます。

残りのJSコードの依存関係管理にrequire.jsを使用しないと、これはほぼ同じように機能しませんが、require.jsを使わないでjavascript devを実行することはできませんとにかく私はそれに慣れています。

また、同じ問題を解決するために使用できる他の同様のテクノロジがある可能性があります。

0

私はクライアント側とサーバー側の両方でbackbone.layout.managerを使用します。そして、ノードEJSテンプレートで私は(名前は明らかにノードからバックボーンとeveryauthからである)このようなものを持っています同じ。

テンプレートデリミタの問題を解決する方法は、サーバー側でページをレンダリングしてから、生のバックボーンテンプレートを挿入することでした。あなたは、クライアント側でカスタム区切り文字を追加することができ、新たなEJSで

0

https://github.com/mde/ejs#custom-delimiters

例:

カスタム区切り文字はグローバルごとのテンプレート単位で適用、またはすることができます。

var ejs = require('ejs'), 
    users = ['geddy', 'neil', 'alex']; 

// Just one template 
ejs.render('<?= users.join(" | "); ?>', {users: users}, {delimiter: '?'}); 
// => 'geddy | neil | alex' 

// Or globally 
ejs.delimiter = '$'; 
ejs.render('<$= users.join(" | "); $>', {users: users}); 
// => 'geddy | neil | alex' 
関連する問題