0

template::toolkitによって前処理されたhtmlページにjsスクリプトがあります。

スクリプトは次のとおりです。

<script>
    $(function(){ 
    var floot = {
        id : [% floot.id %],
        image : '[% floot.image %]',
        title : "[% floot.title %]",
        desc : "[% floot.desc %]",
        history : []
    };
            /* unrelated stuff */
            /* set click event to display the floot details in an overlay */
    $('#' + floot.id).children('.openDetails').click(function() { 
        bubbleDetails(floot, user);
    });
</script>

問題は、floot.descに改行が含まれている可能性があることです。これは説明であり、それらを保持したいのですが、改行のjs barfsチップにより、予期しないトークンエラーが発生します。

たとえば、いくつかのTTフィルターを試しました

[% floot.desc | html_line_break | replace('\n', ' ') %]

これにより、改行が正常に削除され、<\ br>に置き換えられます(バックスラッシュを使用してください。エディターはbrを解釈します)が、機能せず、ページは、ではなく<\br>でレンダリングされます。壊す。

この段階では、これを行う唯一の方法は、bubbleDetails内からfloot.descで<\ br>を検索し、その出現箇所を改行で置き換えることだと考えていますが、誰かがより良い、より少ないことを知っているかどうかを確認したかったのです。それを行うための不格好な方法?

ご入力いただきありがとうございます。

4

2 に答える 2

0

JSON変換を処理するためのTTプラグインがあります。これは、明示的に実行していない場合でも効果的に実行できます。コード生成は可能な限り避ける必要があります-プラグインにそのような不可解な問題について心配させてください。

私はJSON::Escapeが好きです。これは次のように実行できます。

[% USE JSON::Escape; %]
<script>
    $(function(){ 
    var floot = [% floot.json %];
    floot.history = []; // might not even be necessary?
    };
            /* unrelated stuff */
            /* set click event to display the floot details in an overlay */
    $('#' + floot.id).children('.openDetails').click(function() { 
        bubbleDetails(floot, user);
    });
</script>

この関連する質問と回答も役立つ場合があります。

この方法でエラーが発生する場合は、@ agrecoが言うように、bubbleDetails()関数の問題である必要があります。

于 2013-01-16T23:44:17.737 に答える
0

私はこれまでこのパッケージを使用したことがありませんが、ドキュメントを見ると、これが必要なようです。

http://template-toolkit.org/docs/manual/VMethods.html

dquote セクションまでスクロールします

二重引用符もエスケープします。これはおそらく良いでしょう

于 2013-01-16T20:57:27.830 に答える