0

Dust.js を使用するための調査を行っていますが、悪いデータがレンダリングされるのを防ぐ方法があるのではないかと考えていました。

テンプレート

Hello {name}! You have {count} new messages

環境

{
   "name": "Mick",
   "count": Math.PI
}

利回り、この結果:

Hello Mick! You have 3.141592653589793 new messages

この例では、Math.PI をエスケープして、3.14 を印刷しないようにする方法はありますか?

4

1 に答える 1

1

あなたは開発者として、何が「悪いデータ」であり、何が許容可能な代替物であるかを決定する必要があります。

次に、dust.js に到達する前にコード (ページを構築する node.js など) で変換するか、適切なフォールバックで必要なものをレンダリングするヘルパーを作成する必要があります。たとえば、整数をレンダリングし、それ以外の場合はカスタム フォールバック テキストを表示する場合は、次のようなヘルパーを使用できます。

integerOrElse関数を作成し、ファイルに保存します。

local-dust-helpers.js :

// this extends dustjs-helpers (which must therefore be in package.json)
var dust = require('dustjs-helpers');

dust.helpers.integerOrElse = function (chunk, ctx, bodies, params) {
  // tap function resolves variables in params
  var value = dust.helpers.tap(params.value, chunk, ctx),
  fallback = dust.helpers.tap(params.fallback, chunk, ctx) || '';
  // define a fallback for the fallback :) ----------------^^^^^

  // for more brevity, you could do this in one line with a ternary operator
  if (!isNaN(value) && parseInt(value) == value) {
    return chunk.write(value);
  } else {
    return chunk.write(fallback);
  }
}

次にrequire()、アプリで、バニラのdust.jsを呼び出した場所を置き換えます。

app.js

...
var dust  = require('./local-dust-helpers');
...

その後、ネイティブの Dust.js ディレクティブと同じように使用できます。

テンプレート.ダスト

Hello {name}!
You have {@integerOrElse value='{count}' fallback='some' /} new messages
于 2014-05-19T14:49:51.630 に答える