Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 强制计算一个新值以剔除计算出的值_Javascript_Jquery_Knockout.js_Knockout 2.0 - Fatal编程技术网

Javascript 强制计算一个新值以剔除计算出的值

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 =

我正在使用Knockout构建一个数量/选项非常多的应用程序,就幕后发生的事情而言,我目前正在处理的屏幕非常复杂。整个屏幕是动态的,显示的选项是从可观察的屏幕上生成的

例如:

然后,要获取每个对象的值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;
});
这就是解释起来有点复杂的地方,所以如果有什么不能直接解释的,请告诉我

单击每个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
    ));
};