我正在使用Knockout构建一个非常数字/选项繁重的应用程序,而我目前正在处理的屏幕上,在幕后发生的事情方面非常复杂。整个屏幕是动态的,显示的选项是从observableArray生成的。
示例:
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.background_treatments_options = ko.observableArray([]);
self.background_treatments_options.push(new backgroundTreatmentsOption(
Treatment_Settings[0].Background_Treatments[0].Label_dose_H1s[0].label_text,
sessionStorage.getItem('background_treatments_label_dose_h1s_value') || Treatment_Settings[0].Background_Treatments[0].Label_dose_H1s[0].default_value,
false,
'bg-label-dose-h1s'
));
然后获取每个对象的值(self.value)(稍后在应用程序中使用)我执行以下操作:
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;
});
现在这是一个有点复杂的解释,所以请告诉我是否有任何事情没有直接意义。
每个标签(self.label),当点击切换“活动”标签时, DOM中该元素的状态,以显示它打开/关闭的可见外观。
当标签切换为“关闭”时我需要强制相关值(在这种情况下它是self.background_treatments_updosed_h1s_2x_3x_4x_value
)重置为0.我已经能够使用hacky jQuery将输入的值重置为0但是这个不会重置DOM / KO级别的值。
所以我的问题是,当点击标签时,我如何强制self.background_treatments_updosed_h1s_2x_3x_4x_value
成为0?
答案 0 :(得分:0)
也许这对你有用:
从var value = 0;
计算的observable中删除background_treatments_updosed_h1s_2x_3x_4x_value
。
相反,请使用作用域的变量,以便可以在ViewModel中的任何位置访问它。另外,在subscribe
可观察对象中添加label
,以便重置此新变量。我不知道你的代码是什么样的,例如:
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
));
};