2013-07-11 3 views
0

Выполнение некоторых исследований для использования dust.js, и мне было интересно, есть ли способ предотвратить отображение плохих данных.DustJS: Escape input from context

Шаблон

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

Контекст

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

Урожайность, этот результат:

Hello Mick! You have 3.141592653589793 new messages 

В этом примере есть способ избежать Math.PI, так что мы может спастись и не распечатать 3.14 ..

+2

Что вы хотите, чтобы напечатать вместо этого? Почему Math.PI плохие данные? – smfoote

ответ

1

Вы, как разработчик, должны решить, что такое «плохие данные» и что является приемлемой альтернативой.

Затем вы должны либо преобразовать его в код (например, node.js, строя страницу), прежде чем он достигнет dust.js, либо write a helper, чтобы сделать все, что захотите, с соответствующим резервом. Например, если вы хотите сделать целые числа, а также отображать некоторые пользовательские резервный текст в противном случае, вы можете использовать помощник что-то вроде этого:

Создать учетную функцию integerOrElse, и сохранить его в файле, например.

местные-пыльные 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'); 
... 

Затем вы можете использовать его точно так же, как и native dust.js директива:

template.dust

Hello {name}! 
You have {@integerOrElse value='{count}' fallback='some' /} new messages