web-dev-qa-db-ja.com

ハンドルバーヘルパー-テキストではなくHTMLを返す

テンプレートの簡単なヘルパーを作成しました。コードは次のとおりです。

Handlebars.registerHelper('splitQuote', function (string) {
    if (string.indexOf('|') !== -1) {
        return string.replace('|', '<span>') + '</span>';
    }
    return string;
});

したがって、文字列を渡し、文字列を「|」で分割します。キャラクター。また、2番目の部分をスパンタグに入れたいと思います。

問題は、返される結果が純粋なテキストであるため、HTMLではなくテキストのようなスパンタグを取得することです。

誰かがキャッチが何であるか知っていますか?

Tnx

19
Adrian

ハンドルバーで文字列をエスケープしたくない場合は、ヘルパーで文字列をhtmlとしてマークする必要があります。これを行うには、 _Handlebars.safeString_ を使用します。以下はあなたのニーズに合うはずです

_Handlebars.registerHelper('splitQuote', function(string) {
    if (string.indexOf('|') !== -1) {
        return new Handlebars.SafeString(string.replace('|', '<span>') + '</span>');
    }
    return string;
});
_

コメントで述べたように、カスタムフォーマットを行う前に、Handlebars.Utils.escapeExpression(string)を使用して渡された文字列をエスケープし、文字列をエンコードする必要があります。このように書くことをお勧めします:

_Handlebars.registerHelper('splitQuote', function(string) {
    string = Handlebars.Utils.escapeExpression(string);
    if (string.indexOf('|') !== -1) {
        string = string.replace('|', '<span>') + '</span>';
    }
    return new Handlebars.SafeString(string); // mark as already escaped
});
_
34
megawac

SafeStringを使用する必要はありません。代わりに、ハンドルバーの「トリプル口ひげ」を使用してください。

Handlebars Webサイト から、HTMLエスケープセクション:

ハンドルバーHTML-{{expression}}によって返される値をエスケープします。ハンドルバーに値をエスケープさせたくない場合は、「トリプルスタッシュ」、{{{。

したがって、HTMLでの単純な三重引用符は、エスケープを回避します。

{{{splitQuote}}} 
25
Mendes