Javascript 强制计算一个新值以剔除计算出的值
我正在使用Knockout构建一个数量/选项非常多的应用程序,就幕后发生的事情而言,我目前正在处理的屏幕非常复杂。整个屏幕是动态的,显示的选项是从可观察的屏幕上生成的 例如: 然后,要获取每个对象的值self.value(稍后在应用程序中使用),请执行以下操作:Javascript 强制计算一个新值以剔除计算出的值,javascript,jquery,knockout.js,knockout-2.0,Javascript,Jquery,Knockout.js,Knockout 2.0,我正在使用Knockout构建一个数量/选项非常多的应用程序,就幕后发生的事情而言,我目前正在处理的屏幕非常复杂。整个屏幕是动态的,显示的选项是从可观察的屏幕上生成的 例如: 然后,要获取每个对象的值self.value(稍后在应用程序中使用),请执行以下操作: self.background_treatments_updosed_h1s_2x_3x_4x_value = ko.computed(function () { var value = 0; for (var i =
self.background_treatments_updosed_h1s_2x_3x_4x_value = ko.computed(function () {
var value = 0;
for (var i = 0; i < self.background_treatments_options().length; i++) {
if (i == 1) {
value += parseFloat(self.background_treatments_options()[i].value());
}
}
return value;
});
这就是解释起来有点复杂的地方,所以如果有什么不能直接解释的,请告诉我
单击每个label self.label时,会切换DOM中该元素的“活动”状态,以提供打开/关闭该元素的可见外观
当标签切换到“关闭”时,我需要强制相关值在这种情况下,它的self.background\u treatments\u updosed\u h1s\u 2x\u 3x\u 4x\u值重置为0。我已经能够使用hacky jQuery将输入的值重置为0,但这不会在DOM/KO级别重置该值
所以我的问题是,当点击标签时,我如何强制self.background\u treatments\u updosed\u h1s\u 2x\u 3x\u 4x\u值变为0?也许这对你有用: 去掉var值=0;从您的背景中\u治疗\u向上剂量\u h1s\u 2x\u 3x\u 4x\u可观察的计算值 相反,请使用一个限定范围的变量,以便可以在ViewModel中的任何位置访问该变量。另外,向标签observable添加一个subscribe,以便重置这个新变量。我不知道您的整个代码是什么样子的,例如:
function ViewModel() {
var self = this;
var updosedValue = 0;
self.background_treatments_updosed_h1s_2x_3x_4x_value = ko.computed(function () {
for (var i = 0; i < self.background_treatments_options().length; i++) {
if (i == 1) {
updosedValue += parseFloat(self.background_treatments_options()[i].value());
}
}
return updosedValue;
};
function backgroundTreatmentsOption(label, value, active, name) {
var self = this;
self.label = ko.observable(label);
self.value = ko.isObservable(value) ? value : ko.observable(value);
self.active = ko.isObservable(active) ? value: ko.observable(active);
self.name = ko.observable(name);
self.label.subscribe(function(value) {
if (!value)
updosedValue = 0;
});
};
}
您是否尝试过读取/写入淘汰。使用此选项可以强制生成一个新值。啦啦队你写回你读到的价值观吗?或者更具体地说,如何使用上面的示例将0写入self.background\u。。。变量?我不太确定这是否是我想要的。我真的只是想能够将“0”写入self.background\u treatmwnts。。。。例如:$'label'。单击时,函数{//重置为零};因此,当您单击按钮时,您希望文本框重置为0.0%,但希望标签保持原样?例如,如果文本框的读数为10.0%,标签的读数为10.0%,然后单击按钮,您希望文本框变为0.0%,标签保持为10.0%?不,它必须将所有内容重置为0,问题是该值是计算变量的总和,并且难以将0“写入”该变量。
function ViewModel() {
var self = this;
var updosedValue = 0;
self.background_treatments_updosed_h1s_2x_3x_4x_value = ko.computed(function () {
for (var i = 0; i < self.background_treatments_options().length; i++) {
if (i == 1) {
updosedValue += parseFloat(self.background_treatments_options()[i].value());
}
}
return updosedValue;
};
function backgroundTreatmentsOption(label, value, active, name) {
var self = this;
self.label = ko.observable(label);
self.value = ko.isObservable(value) ? value : ko.observable(value);
self.active = ko.isObservable(active) ? value: ko.observable(active);
self.name = ko.observable(name);
self.label.subscribe(function(value) {
if (!value)
updosedValue = 0;
});
};
}
self.resetValueToZero = function () {
self.computedValues([]);
self.computedValues.push(new computedValue(
'getValueOne:',
0
));
};