gpt4 book ai didi

javascript - Knockout.js 在 ko.observable() 写入之前修改值

转载 作者:搜寻专家 更新时间:2023-11-01 04:09:53 26 4
gpt4 key购买 nike

我有一个包含大量变量的工作 View 模型。

我使用 autoNumeric ( http://www.decorplanit.com/plugin/ ) 在文本框中设置文本格式。我想在计算的可观察对象中使用输入字段的观察数据,但如果修改了带有格式的可观​​察文本字段,则格式也会保存在变量中。

如何在没有格式化的情况下只观察输入字段的值?

我认为最好的方法是对可观察对象进行 getter/setter,并在设置值时删除格式。我在 knockout 的文档中找不到为 ko.observable() 编写 get/set 方法的解决方案,并且 ko.computed() 无法存储值。

我不想使用隐藏字段或额外变量。
没有它这可能吗?

最佳答案

解决方案,见 http://knockoutjs.com/documentation/extenders.html

ko.extenders.numeric = function(target, precision) {
//create a writeable computed observable to intercept writes to our observable
var result = ko.computed({
read: target, //always return the original observables value
write: function(newValue) {
var current = target(),
roundingMultiplier = Math.pow(10, precision),
newValueAsNum = isNaN(newValue) ? 0 : parseFloat(+newValue),
valueToWrite = Math.round(newValueAsNum * roundingMultiplier) / roundingMultiplier;

//only write if it changed
if (valueToWrite !== current) {
target(valueToWrite);
} else {
//if the rounded value is the same, but a different value was written, force a notification for the current field
if (newValue !== current) {
target.notifySubscribers(valueToWrite);
}
}
}
});

//initialize with current value to make sure it is rounded appropriately
result(target());

//return the new computed observable
return result;
};

稍后

function AppViewModel(one, two) {
this.myNumberOne = ko.observable(one).extend({ numeric: 0 });
this.myNumberTwo = ko.observable(two).extend({ numeric: 2 });
}

关于javascript - Knockout.js 在 ko.observable() 写入之前修改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16171912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com