2016-07-05 7 views
0

dust.js内でHTMLエンコードをグローバルに無効にする方法はありますか?レンダリング中にデータを消したいと思うほどデータを信頼しています。すべてのテンプレートファイルのすべてのタグに "|"を追加する必要はなく、グローバルに設定できることが理想的です。dust.js HTMLエンコードをグローバルにオフにする

そうでない場合、カスタムヘルパーでフィルタリングを使用する方法はありますか? @valヘルパーを作成しましたが、 "| s"フィルターを適用する方法はありません。ドキュメントによると、次のように動作するはずです:

{@val filters="|s" /}

しかし、それは自分自身では動作しませんので、私はいくつかのロジックを考えていると、ヘルパー自身の中に配置する必要があります。

+0

まだ2番目の質問への解決策を見つけていないが、まず、「| h」フィルタをエスケープしないように更新して、自動エスケープをグローバルに削除することができました。 dust.filters.h = function(value){戻り値; }; 新しいフィルタを追加して置き換えました。 dust.filters.esc = function(value){return dust.escapeHtml(value);} }; –

答えて

0

ほとんど文書化されていないescプラグマを使用して、テンプレートブロックにグローバルコンテキストを適用できます。あなたの2番目の質問については

{ 
    "hello": "Hello & World" 
} 

{%esc:s} 
    This applies |s to everything inside the pragma 
    {hello} <-- will not escape the ampersand 
{/esc} 

、それはあなたのヘルパーが何をしているかに依存します。あなたのヘルパーが、例えばChunk.renderを介して何らかのチャンクを返す場合は、フィルタを手動で適用する必要があります。ヘルパーが値を返す場合、その値は存在する任意のfiltersに渡されます。ここにいくつかの例があります:助手を持っていれば、それに渡されたものだけがvalueとして返されます。あなたのヘルパーから値を返す

filtersを意味尊敬されている:あなたのヘルパーからのチャンクを返す

dust.helpers.val = function(chunk, context, bodies, params) { 
    return params.value; 
}; 

{@val value="Hello & World" /} <-- Hello &amp; World 
{@val value="Hello & World" filters="s" /} <-- Hello & World 

filtersを無視します:

dust.helpers.val = function(chunk, context, bodies, params) { 
    return chunk.write(params.value); 
}; 

{@val value="Hello & World" /} <-- Hello & World 
関連する問題