我有一个ko.observable
,称为Amount,它存储一个数值。我需要一种将数值限制在特定上限的方法(上限由同一 ViewModelko.computed
中称为Max的 a 提供。)当用户尝试输入超过Max的Amount值时,我想采用overage 并将其应用于另一个,称为Overage,并且也不允许Amount的值超过Max的值。如何实现?ko.observable
问问题
92 次
1 回答
0
您最有可能扩展您的 observable,具体取决于您想要实现的目标。这应该给你一个很好的方向(我还没有把它扔进小提琴来测试它) -
ko.extenders.overage = function(target, max) {
target.overage = ko.observable();
var result = ko.computed({
read: target,
write: function(newValue) {
var current = target(),
valueToWrite = newValue > max ? max : newValue
if (valueToWrite === max) {
target.overage(current - max);
target(valueToWrite);
} else {
target.notifySubscribers(valueToWrite);
}
}
});
result(target());
return result;
};
function AppViewModel(one) {
this.myNumberOne = ko.observable(one).extend({ overage: 500 });
}
ko.applyBindings(new AppViewModel(221.2234));
现在,您的 observablemyNumberOne
有一个扩展属性,要求您扩展它时设置overage
的任何额外数量max
(在本例中为 500),myNumberOne 或您扩展的任何其他 observable 的值将上限为 500,并将附加值传递为超龄。
在您看来,您可以使用这样的东西 -
<span data-bind="text: myNumberOne"></span>
<!-- ko if: myNumberOne().overage -->
Overage amount - <span data-bind="text: myNumberOne().overage"></span>
<!-- /ko -->
或者
<span data-bind="text: myNumberOne"></span>
<div data-bind="text: $data.myNumberOne().overage"></div>
扩展它并订阅它,不要使用计算,等等......检查小提琴
于 2013-10-22T14:17:37.640 回答