2014-03-12 111 views
0

我正在使用Knockout.js,我試圖在用戶輸入上使用掩碼。 當用戶輸入號碼時,我想使用蒙版,並用逗號顯示。那麼1000將是1000基因敲除掩碼

的,我有這個功能

function numberWithCommas(n) { 
    var parts=n.toString().split("."); 
    return parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (parts[1] ? "." + parts[1] : ""); 
} 

我不明白我應該如何使用它來顯示它在正確的道路。

HTML(的一部分)

<div class="col-sm-2"> 
    <input type="text" id="myAmountInput" class="form-control" data-bind="value: myAmount"> 
</div> 

JS(的一部分)

define(['knockout', 'knockout-validation', 'services/changeup', 'moment', 'lodash', 'plugins/router'], function (ko, validation, changeup, moment, _, router) { 
    function numberWithCommas(n) { 
     var parts = n.toString().split("."); 
     return parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (parts[1] ? "." + parts[1] : ""); 
    } 

    var timerId = setInterval(tick, 1000 * 10); 

    var exports = { 
     isRequestor: undefined, 
     myAmount: ko.observable().extend({ required: true, number: true }), 
     errors: ko.validation.group(this), 
     activate: function (activationData) { 
      var requestId = activationData; 
      return changeup.getUserInfo().then(function (userInfo) { 
       exports.userInfo = userInfo; 
       return changeup.getRequest(requestId).then(function (request) { 
        exports.request = wrapRequest(request); 
        exports.isRequestor = request.username === userInfo.username; 

        if (exports.isRequestor) { 
         exports.myAmount(null); 
         exports.isResponder(true); 
        } 
        else { 
         var currentResponse = _.find(exports.request.responses(), function (r) { return r.username === userInfo.username; }); 
         exports.isResponder(!!currentResponse); 
         exports.myAmount(currentResponse ? currentResponse.amount : null); 
        } 
        tick(); 
       }); 
      }); 
     } 
    }; 
    return exports; 
}); 

回答

1

我想創建一個計算觀察到的,綁定到替代

this.myAmountWithCommas = ko.computed(function() { 
     return numberWithCommas(this.myAmount()); 
    }, this); 

Computed Observable

例如 jsFiddle

更新 使用綁定的處理程序,如果你喜歡使用添加簡單的例子,jsFiddle

+0

整個例子中,我試圖做到這一點,我沒有沒有成功將它與代碼結合:\ – Bruse

+0

jsfiddle示例有幫助嗎? – PB1

0

我只是answered a question有關使用jQuery插件屏蔽。答案涉及如何使用自定義綁定處理程序來使與淘汰賽的集成更容易。可能是需要考慮的事情。

0

出於同樣的目的,我使用jquery.maskedinput插件。它允許用戶更容易地輸入固定寬度輸入,您希望他們以特定格式(日期,電話號碼等)輸入數據。

和自定義綁定處理

然後你就可以使用它的DOM元素

<input data-bind="value: Number, mask: '9,9999'"/> 

JSFIDDLE