2017-07-03 5 views
1

javascript関数をバインドしようとしていますが、バインディング時に自動的に10進数値が変換される問題が発生し続けます(53.000は53000に変換されます)。以下は私が達成しようとしているものの例です。 VATは53.000と価格である大量の数値で問題を作成するKnockoutJSスクリプト

<script data-bind="text: 'getNewValue(Price ',' + VAT + ');'"></script> 

は、私は(2)のようなので、成功せず.toFixedを追加しようとしている378

です。

<script data-bind="text: 'getNewValue(Price.toFixed(2) ',' + VAT.toFixed(2) + ');'"></script> 

ありがとうございました! knockout.jsで

/ピーター・

+0

値はどのような形式ですか?また、getNewValue関数ではどうなりますか? toFixed(2)は、通常、正しい十進数を与えるべきです – Fabwoofer

+0

数字は私がこの記述に書いたように正確なフォーマット "53.000"を持っています。 getNewValue関数の機能は重要ではありません。getNewValue関数に正しい値を取得するだけで済みます。私は関数 "getnewValue"の値 "53,00"と "378"を取得する必要があります。意味がありますか? – user3105469

+0

これを一重引用符なしで呼び出すことができます。変数を2つの変数として渡す必要がある場合は、単に '+'、+を削除してカンマを追加する必要がある場合は、以下の答えで述べた関数を呼び出してください。 – Fabwoofer

答えて

1

あなたは、このようなデータバインドで直接関数を定義することができます

<script data-bind="text: getNewValue(Price.toFixed(2) + ',' + VAT.toFixed(2));"></script> 

両方の値が1で2に固定小数でこれはあなたのgetNewValue関数を呼び出します

変数あなただけのあなたも、このようなデータバインドで直接それを行うことができ、これらの2つの値の連結をしたい場合:

<script data-bind="text: Price.toFixed(2) + ', ' + VAT.toFixed(2);"></script> 

これはにつながる:、 53.00 378.00

+0

問題は、私がPrice.toFixedを取得するのは、それを行うときの関数ではないということです。私が言及したように、私はすでにtoFixed(2) – user3105469

+0

メッセージを実行しようとしました:Price.toFixedは関数ではありません eval(eval at createBindingsStringEvaluator(knockout-2.3.0.debug.js:2000)、:3:204) ko.bindingProvider.parseBindingsStringで (ノックアウト-2.3.0.debug.js:1978)ko.bindingProvider.getBindings(ノックアウト-2.3.0.debug.js:1960)で ko.dependentObservable.disposeWhenNodeIsRemovedで(knockout- 2.3.0.debug.js:2123) at evaluateImmediate(knockout-2.3.0.debug.js:1270)... – user3105469

+0

このエラーが発生したとは言いません。これは価格の値がタイプ番号ではないように私に見えます。 try:parseFloat(Price).toFixed(2)この記事で述べたように:https:// stackoverflow。com/questions/4937251/why-is-my-tofixed-function-not-working – Fabwoofer

3

を私は電話番号を処理するために、本来はこれを書いたが、通貨のためにうまく動作するようです。 (注:私はここでUSDを使用しています)。この購読可能な計算では、それを任意の通貨要素に追加するだけで、通貨として正しく表示されますが、値を浮動小数点/整数として保持します。これにより、ビューモデル全体の計算での使用が容易になります。

function ToAmount() { 
 
    return ko.computed({ 
 
    read: function() { 
 
     var num = parseFloat(ko.unwrap(this)); 
 
     return this() ? "$" + num.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ",") : "$0.00"; 
 
    }, 
 
    write: function(_amount) { 
 
     this(_amount); 
 
     this.notifySubscribers(); 
 
    }, 
 
    owner: this, 
 
    }).extend({ 
 
    notify: 'always' 
 
    }); 
 
} 
 
ko.subscribable.fn.ToAmount = ToAmount; 
 

 
function vm() { 
 
    var self = this; 
 

 
    self.Money = ko.observable(12.345); 
 
} 
 

 
ko.applyBindings(new vm());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> 
 

 
<input data-bind="value: Money.ToAmount()">

+0

素晴らしいフィードバックをありがとう! – user3105469

関連する問題