2012-04-23 8 views
9

これらはどちらも同じ構文を変数の挿入に使用します。それは、ユーザ名を交換しようとすると、そのような変数がメインページに存在しないので、例えば、私は私のアンダースコア、私のメインEJSブレークでは、次のEJSと一緒にUnderscore.jsテンプレートを使用するにはどうすればよいですか?

<%= username %> 

をしたい場合。

+0

なぜ両方必要ですか?ここで述べたように、角括弧は機能しますか? http://code.google.com/p/embeddedjavascript/wiki/テスト – Marc

+1

私はBackbone.jsでEJSを使用しています – deltanovember

+0

は大括弧で囲まれていますか? – Marc

答えて

9

私は角括弧はデフォルトでEJSに動作すると思う:

[%= username %] 

そして、あなたは手の込んだ取得する必要がある場合は、EJSのgithubのページには、カスタムタグを作成する方法について説明します。

var ejs = require('ejs'); 
ejs.open = '{{'; 
ejs.close = '}}'; 
  • 第2の "魅力的な"部分はサーバー側のアプリケーションに固有の部分だと思います。

https://github.com/visionmedia/ejs

クライアント側のGitHubの例を使用して、あなたがレンダリングするときに、このような構文を行う必要があると思います:

var html = require('ejs').render(users, { open: "^%", close: "%^" }); 

オプションはrender()の第二パラメータです。

10

私はこの問題を抱えていました。問題のクライアント側を解決するために見つけた解決策を共有すると思いました。ここではどのようにあなたの変更エスケープ正規表現(underscore.js docs経由)である:

_.templateSettings = { 
    interpolate : /\{\{(.+?)\}\}/g 
}; 
var template = _.template("{{example_value}}"); 

は<% =%> {{}}に変更します。

1

バックエンド(express)でejsテンプレートを使用してWebページをレンダリングするときに同じ問題が発生しましたが、フロントエンドではアンダースコアテンプレートを使用する必要がありました。

私はMarcの答えを試みましたが、それは助けにはならない、私はそれが新しいバージョンで使用するために時代遅れだったと思う。新しいバージョンのejs(私が2.3.3)では、代わりにejs.openejs.closeを使用することはできません。代わりにejs.delimiterを使用してください。

ejsで区切り文字を '$'に変更したので、ejsは変数を挿入するのに<$ $>タグのみを扱い、<% %>タグを意味のない構文として扱います。

app.set('view engine', 'ejs'); 
var ejs = require('ejs'); 
ejs.delimiter = '$'; 
app.engine('ejs', ejs.renderFile); 

注:私は急行のアプリケーションでapp.jsファイルに上記のコードを追加し、それがうまく働いた、とあなたはフロントエンドにそれを使用したい場合は、単にオプションの引数としてejs.render(str, options){'delimiter': '$'}を渡します。

0

私は最近、この問題に遭遇しました.EJSを再構成したくなかったので、アンダースコアがどのように補間、評価、エスケープするかを変更しました。ここではデフォルトで

は、現在のアンダースコアテンプレートの設定です:その後、私はに設定を更新

_.templateSettings = { 
    interpolate: /<%([\s\S]+?)%>/g, 
    evaluate: /<%=([\s\S]+?)%>/g, 
    escape: /<%-([\s\S]+?)%>/g 
}; 

:つまり

_.templateSettings = { 
    interpolate: /\{\{=([^}]*)\}\}/g, 
    evaluate: /\{\{(?!=)(.*?)\}\}/g, 
    escape: /\{\{-([^}]*)\}\}/g 
}; 

、上記のスニペットは、アンダースコアで次のように変更されます。

  • 補間

    • から:<%= ... %>
    • へ:{{= ... }}
    • 式:<% ... %>
    • /\{\{=([^}]*)\}\}/g
  • から

    • 評価
    • へ:{{ ... }}
    • 式:/\{\{(?!=)(.*?)\}\}/g
  • エスケープ

    • から<%- ... %>
    • へ:{{- ... }}
    • 式:/\{\{-([^}]*)\}\}/g

その後、私のアンダースコアテンプレートは次のようになります。

// Underscore 
<script type="text/template"> 
    <ul> 
    {{ _.each(collection, function(model) { }} 
    <li>{{= model.text }}</li> 
    <li>{{- model.textEscaped }}</li> 
    {{ }); }} 
    </ul> 
</script> 

...と私のEJSテンプレートが同じままで、私は補間するデフォルトのERB構文を使用し続けることができます/値を評価:<% ... %><%= ... %>

// EJS 
<% if (isAuthenticated) { %> 
    <%= user.displayName %> 
<% } %> 
関連する問題