2016-04-26 18 views
0

私はhandlebars.jsを使っています。私はヘルパーでいくつかの数字を書式化したいと思います。数値を書式設定するには、私の期待を満たすと思われるaccounting.jsライブラリがあります。ここで引数オブジェクトを関数にどのように送信するのですか?

// Simple `format` string allows control of symbol position (%v = value, %s = symbol): 
accounting.formatMoney(5318008, { symbol: "GBP", format: "%v %s" }); // 5,318,008.00 GBP 

が私の現在のヘルパーです::私は使用することができます番号書式を設定するには

Handlebars.registerHelper('amount', function(item) { 
    if (item == null) { 
     return "-"; 
    } else {  
     return accounting.formatMoney(item,{symbol: "EUR", format: "%v %s"});          
    } 
}); 

これは、使用中の厳格なビットを動作しますが、これを、私は私の数値をフォーマットできるようにしたいのですがオプション。私の新しいヘルパーは次のようになります。

Handlebars.registerHelper('amount', function(item, options) { 
    if (item == null) { 
     return "-"; 
    } else {  
     return accounting.formatMoney(item,options);          
    } 
}); 

問題は、私は労働者にオブジェクトを渡す方法がわからないので、それが動作しないということです。私は内部の\とコメントの前後に引用符と二重引用符でそれを使用する場合は

handlebars.js:1659 Uncaught Error: Parse error on line 87: 
...gramme.amountIssued {symbol: "EUR", for 
-----------------------^ 
Expecting 'CLOSE_RAW_BLOCK', 'CLOSE', 'CLOSE_UNESCAPED', 'OPEN_SEXPR', 'CLOSE_SEXPR', 'ID', 'OPEN_BLOCK_PARAMS', 'STRING', 'NUMBER', 'BOOLEAN', 'UNDEFINED', 'NULL', 'DATA', 'SEP', got 'INVALID' 

:ここに私の呼び出しは、テンプレートに

{{amount programme.amountIssued {symbol: "EUR", format: "%v %s"} }} 

ですこれは私に次のような結果になります

{{amount programme.amountIssued "{symbol: \"EUR\", format: \"%v %s\"}" }} 

この結果は期待通りではありません。

{symbol: "EUR", format: "4,000,000,000.00 %s"}%v 

の代わりに4,000,000,000.00 EUR

+0

一般的なヒント:JSオブジェクトは** JSONと同じものではありません**。それが「オブジェクト」と呼ぶだけです。一般的な混乱ですが、この2つのことは実際には非常に異なるので、それらを混ぜ合わせないことが重要です。 – Tomalak

答えて

1

オブジェクトを使用してJS関数に引数を渡すことはできません。しかし、それらを配列として渡すことができます。これは.applydocs)によって行われます。

読みやすさのためにラップされ、すべてのオプションを含めデフォルト:

Handlebars.registerHelper('amount', function (item, options) { 
    if (item == null) return "-"; 

    return accounting.formatMoney.apply(accounting, [ 
     item, 
     options.symbol || "", 
     options.precision || 2, 
     options.thousands || ".", 
     options.decimal || "," 
    ]);          
}); 
ここ

関数に(したがって操作の名前)値の配列に適用される各配列位置がパラメータ位置と一致関数は期待している。

関連する問題