2017-07-03 83 views
1

我試圖綁定在一起的一個JavaScript函數,但我不斷遇到綁定時自動轉換十進制數值(53.000轉換爲53000)的十進制數值的問題。以下是我嘗試實現的例子;KnockoutJS腳本使用逗號分隔的數值創建問題

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

其中增值稅爲53.000和價格是378

我已經試過(2)沒有像這樣成功追加.toFixed;

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

在此先感謝您的幫助!

/彼得

+0

格式是什麼價值? getNewValue函數中會發生什麼? toFixed(2)通常應該給出一個正確的十進制數字 – Fabwoofer

+0

這個數字具有格式「53.000」,正如我在描述中所寫的那樣。 getNewValue函數功能並不重要,因爲我只需要在getNewValue函數中獲取正確的值。我需要函數「getnewValue」來獲得值「53,00」以及「378」。說得通? – user3105469

+0

然後你可以調用它,而不用單引號。只需調用函數,就像我在下面的答案中提到的那樣,如果需要將變量作爲2個變量傳遞,只需刪除+','+並添加逗號 – Fabwoofer

回答

1

在knockout.js你可以在數據綁定像這樣直接定義函數:

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

這就需要你的函數的getNewValue與兩個值小數在一個固定爲2可變

如果你只是想那些2個值的串聯,你也可以做到這一點直接在數據綁定這樣的:

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

這將導致: 53.00,378.00

+0

問題是,我得到Price.toFixed不是一個功能,當做到這一點。正如我所提到的,我已經嘗試過去修正(2) – user3105469

+0

消息:Price.toFixed不是函數 在eval(eval在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

你還沒有提到你得到這個錯誤。這在我看來就像價格價值不是型號。請嘗試:parseFloat(Price).toFixed(2),如本文所述:https:// stackoverflow。com/questions/4937251/why-my-tofixed-function-not-working – Fabwoofer

3

我寫了這個原本以處理電話號碼,但它似乎很好貨幣工作。 (注意:我在這裏使用美元)。有了這個可計算的訂閱,您只需將它附加到任何貨幣元素,它將作爲貨幣正確顯示,但您保留該值作爲float/int。這使得在整個視圖模型的計算中更容易使用它。

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