2012-01-16 12 views
6

express.jsで動作するプレートテンプレートエンジンを取得しようとしています。私の最初の試みでした。この:Express.jsカスタムテンプレートエンジン(プレート)

app.register('.html', { 
    compile: function (str, options) { 
     var template = new plate.Template(str); 
     return function(locals) { 
      return template.render(locals, function(err, data) { 
       return data; 
      }); 
     } 
    } 
}); 

私は問題はtemplate.renderは、(未定義の)何も返さないということですが、コールバックにデータを渡すことがわかります。私はExpressのように呼び出されたときにレンダリングされたテンプレートを直接返す関数をコンパイル関数が返すと期待しているので、このように動作させる方法はわかりません。

おそらく私はこの問題を解決するために約束を使うことができると思っていましたが、明示的なコードは約束を返すことを期待していないので、そこでは成功しませんでした。イムは、私はちょうど間違ってそれをやってもいない、あまりにも約束を上の速度まで:

ここ
app.register('.html', { 
    compile: function (str, options) { 
     var promise = new Promise(); 
     var template = new plate.Template(str); 
     return function(locals) { 
      template.render(locals, function(err, data) { 
       promise.resolve(data); 
      }); 
      return promise; 
     } 
    } 
}); 

が作品を行うカスタム実装の一例です。差がテンプレートを強調つまりテンプレート()関数は、直接そうようにレンダリングされた文字列を返す:

app.register('.html', { 
    compile: function (str, options) { 
     var template = _.template(str); 
     return function (locals) { 
      return template(locals); 
     }; 
    } 
}); 

本当に{%ブロック%}タグは非常に素晴らしいであるのでプレートテンプレートを使用したいです。どんな助けもありがとうございます。

関連ドキュメント:私はこれを尋ねた後

plate's github docs

express.js app.register docs

+0

私はこれを尋ねた後、速やかに版の作成者がプロジェクトにパッチを追加して速達と互換性を持たせました。 [email protected]+に変更があり、実装の詳細を見ることができます[https://github.com/chrisdickinson/plate/wiki/Getting-Started---In-Node] – joshontheweb

+1

それが本当なら、この質問を受け入れてください! – tjarratt

答えて

5

プレートの作成者は、速やかに急行と互換性を持たせるためにプロジェクトにパッチを追加しました。 [email protected]+に変更があり、実装の詳細を見ることができますhere

関連する問題