4

jQuery で AJAX 成功コールバックを処理する次の関数があります。

function success(data) {
    var templateData = {
        items: data,
        formatMoney: function () {
            return function (value) {
                return Globalization.format(value, 'N');
            };
        }
    };

    // fill reports table
    var filledTable = tableTemplate.render(templateData);
    $tableContainer.html(filledTable);
}

私のテンプレートは次のようになります。

{#Items}}
<tr>
    <td>{{ProductId}}</td>
    <td>{{#formatMoney}}{{Cost}}{{/formatMoney}}</td>
</tr>
{{/Items}}

問題は、Cost の値の代わりに {{Cost}} が得られることです。口ひげのマニュアル (http://mustache.github.com/mustache.5.html) で説明されているように、これがどのように機能するかはわかっていますが、代わりに値を取得したいと思います。

this私の製品オブジェクトを指すので、使用してコストを取得できますthis.Costが、これは単純なケースであり、書式設定が必要な多くのプロパティを持つ多くのオブジェクトタイプがあるため、物事をDRYに保つための一般的なソリューションが必要です。

サーバー側でこれを計算することもできますが、このデータをホーガンで使用するだけでなく、クライアント側の他の計算にも使用するため、クライアント側でこれを行うことを好みます。

レンダリングされていないリテラル ブロックの代わりに、Cost の値を取得するためのより簡単で一般的なクライアント側の方法はありますか?

4

2 に答える 2

1

うん。

厳密に仕様に準拠する Mustache の実装は非常に制限的です。オプションは、ラムダ コードで、「{{Cost}}」文字列をレンダリングし (この文字列とレンダリング関数をラムダ パラメータとして取得する必要があります)、レンダリングされた文字列をフロート (コスト) に解析することです。

確かに、きれいではありません。しかし、それはうまくいくでしょう。使用している Mustache 実装のリポジトリで問題を開くことを忘れないでください。

于 2013-01-28T19:21:10.307 に答える
0

2 つの選択肢があると思います。

1) hogan.js でラムダを使用する

res.render("template", {
          lambdas:{
            formatMoney: function( cost ){
              return cost.format('usd');
            }
          });

テンプレートは

{#Items}}
<tr>
    <td>{{ProductId}}</td>
    <td>{{#lambdas.formatMoney}}{{Cost}}{{/lambdas.formatMoney}}</td>
</tr>
{{/Items}}

2)質問で述べたように、このオブジェクトを使用できます。

JavaScriptコードは

res.render("template", {
  formatMoney:{
    return function(key){
      var cost = this[key];
      return cost.format('usd');
    };
  }
});

テンプレートは

{#Items}}
<tr>
    <td>{{ProductId}}</td>
    <td>{{#formatMoney}}Cost{{/formatMoney}}</td>
</tr>
{{/Items}}
于 2015-06-10T14:15:35.790 に答える