【发布时间】:2014-04-20 09:09:47
【问题描述】:
我正在使用 KnockoutJS 构建一个数字非常多的应用程序,我希望能够格式化大数字,以便它们以逗号分隔且美观 (xxx,xxx)。
正如您将在下面的小提琴中看到的那样,我确实可以通过使用简单的 RegEx 将绑定值包装在格式化函数中来实现这一点,但这样做的问题是这会覆盖输入中的值并插入 ', ' 到基础价值中。
较大的数字在应用程序的下游使用,因此为了防止出现 NaN 错误,我必须将数据属性分配给包含不带 ',' 的值的输入值,这是存储在 sessionStorage 中的值。
我觉得我的 HTML 标记不必要地臃肿,并相信我想要实现的目标可以通过 bindingHandler 实现,但我的绑定处理程序并不完全在那里。
小提琴:http://jsfiddle.net/36sD9/2
formatLargeNumber = function (number) {
if (typeof (number) === 'function') {
return number().toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
}
ko.bindingHandlers.largeNumber = {
init: function(element, valueAccessor) {
var value = ko.unwrap(valueAccessor());
var interceptor = ko.computed({
read: function() {
return formatLargeNumber(value);
},
write: function(newValue) {
value(reverseFormat(newValue));
}
});
if(element.tagName == 'input' )
ko.applyBindingsToNode(element, {
value: interceptor
});
else
ko.applyBindingsToNode(element, {
text: interceptor
});
}
}
有什么想法吗?
【问题讨论】:
标签: javascript jquery knockout.js knockout-2.0