【发布时间】:2016-10-04 12:40:49
【问题描述】:
我想知道是否有理由更喜欢原型函数/viewModel 函数。
假设您想将整数 1234 表示为货币值,例如 12.34€
我所做的是,在Number 对象上创建一个原型函数:
Number.localeSeparator = 1.1.toLocaleString().substr(1, 1);
Number.prototype.centToEuro = function (separator_string) {
if (!separator_string) {
separator_string = Number.localeSeparator;
}
return (this / 100).toFixed(2).replace(".", separator_string) + "€";
}
var vm = {myMoney: ko.observable(1234)};
ko.applyBindings(vm);
这使得数据绑定相当容易,因为我需要在视图中做的就是:
<div data-bind="text: myMoney().centToEuro()"></div>
除了原型函数,我还可以使用几乎相同的代码创建 viewModel 函数,如下所示:
var vm = {
myMoney: ko.observable(1234),
localeSeparator: 1.1.toLocaleString().substr(1, 1),
centToEuro: function (value_int, separator_string) {
if (!separator_string) {
separator_string = vm.localeSeparator;
}
return (value_int / 100).toFixed(2).replace(".", separator_string) + "€";
}
}
ko.applyBindings(vm);
在视图中使用,它看起来像这样:
<div data-bind="text: centToEuro(myMoney())"></div>
如您所知,这两条 HTML 行的长度几乎完全相同,只是方法不同。所以问题是,更喜欢哪种方法?
【问题讨论】:
标签: javascript function knockout.js prototype viewmodel