簡體   English   中英

敲除全局自定義綁定

[英]knockout global custom binding

要求是格式化所有頁面上顯示的金額。 這是我的自定義綁定代碼。

(function () {
    function refresh(element, valueAccessor) {
        var val = ko.utils.unwrapObservable(valueAccessor());
        $(element).text(getCultureSpecificAmount(val));
    }
    ko.bindingHandlers.currency = {
        init: refresh,
        update: refresh
    }
})();

這是格式化金額的方法(不太相關,但仍過帳)

function getCultureSpecificAmount(number) {
var result = 0;
var regex = /[+-]?\d+(?:\.\d+)?/g;
var tempNumber = number;

if (match = regex.exec(number.toString())) {
    tempNumber = match[0];
}

result = (parseFloat(tempNumber)).toLocaleString(culture, { maximumFractionDigits: currencyDecimalDigits, minimumFractionDigits: 0 });
return (number.toString()).replace(tempNumber, result);

}

這是從cshtml來顯示我如何綁定它

 <span style="font-weight:bold" data-bind="currency:PurchaseOrderValue"></span>

getCultureSpecificAmount方法是用通用的js編寫的。 目前,我正在為每個js編寫用於自定義綁定的代碼。 如果我將此代碼移到common.js,則它將停止工作。 在每個頁面上編寫此代碼會使代碼看起來很難看。 有沒有一種方法可以全局定義自定義綁定並在所有頁面上使用它。 這是我的淘汰賽項目,所以我一無所知。

這是可行的。 我發現的問題之一是, if(match = regex.exec(...))需要移到if(...)語句之外,但if(match = regex.exec(...)) ,以下代碼基本相同,這樣您就可以開始工作了。

 function getCultureSpecificAmount(number) { var result = 0; var regex = /[+-]?\\d+(?:\\.\\d+)?/g; var tempNumber = number; var match = regex.exec(number.toString()); if (match != null) { tempNumber = match[0]; } var culture = "en-AU"; var currencyDecimalDigits = 2; result = (parseFloat(tempNumber)).toLocaleString(culture, { maximumFractionDigits: currencyDecimalDigits, minimumFractionDigits: 0 }); return (number.toString()).replace(tempNumber, result); } function refresh(element, valueAccessor) { var val = ko.utils.unwrapObservable(valueAccessor()); $(element).text(getCultureSpecificAmount(val)); } ko.bindingHandlers.currency = { init: refresh, update: refresh } var vm = { PurchaseOrderValue: ko.observable(3596.94985) }; ko.applyBindings(vm); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <label>Purchase Order Total</label> <span style="font-weight:bold" data-bind="currency:PurchaseOrderValue"></span> <br/> <label>Edit Purchase Order Total</label> <input data-bind="textInput: PurchaseOrderValue" /> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM