在多个绑定的KnockoutJs订阅函数中完成相同的任务

Same task to be done inside multiple binded KnockoutJs subscribe function

本文关键字:任务 函数 绑定 KnockoutJs      更新时间:2023-09-26

我正在处理KnockoutJs,我使用了带有文本框的valueUpdate:'afterkeydown'和带有select元素的valueUpdate:'change'来订阅相应的更改并执行相同的任务。我想在每个函数的值更改后通过subscribe调用相同的函数。

为了更清楚地表明这一点,我看到了以下内容:

    <input type="text" data-bind="value: val1, valueUpdate: 'afterkeydown'"/>
    <input type="text" data-bind="value: val2, valueUpdate: 'afterkeydown'"/>
    <select data-bind="value: sel1, valueUpdate:'change'">
    <select data-bind="value: sel2, valueUpdate:'change'">

在javascript中,我订阅了这样的每一个更改:

viewModel.val1.subscribe(function () {
            doSameWork();
        });
viewModel.val2.subscribe(function () {
            doSameWork();
        });
viewModel.sel1.subscribe(function () {
            doSameWork();
        });
viewModel.sel2.subscribe(function () {
            doSameWork();
        });

################################
var doSameWork = function(){  alert('some work done!');  };

若我对每个valueUpdate调用相同的函数,那个么我想知道是否有任何方法可以在单个订阅中订阅每个valueUpdate(保存LOC)或类似的东西,而不是单独订阅四个值更新,如果我必须对每个值更新都做相同的事。提前感谢。:)

您只能创建一个事件处理程序,并将其"共享"给所有可观察的

var ViewModel = function () {
    var self = this;
    self.onValueChanged = function (newValue) {
        // your task
        alert('some work done!');
    };
    self.val1 = ko.observable();
    self.val1.subscribe(self.onValueChanged);
    self.val2 = ko.observable();
    self.val2.subscribe(self.onValueChanged);
    self.sel1 = ko.observable();
    self.sel1.subscribe(self.onValueChanged);
    self.sel2 = ko.observable();
    self.sel2.subscribe(self.onValueChanged);
};

查看小提琴

@Accsharma:

第一次评估计算值时,ko引擎检测可观测值和计算值之间的相关性。所以当你写这篇文章时:

ko.computed(function(){ val1(); val2(); sel1(); sel2(); doSameWork(); });

Ko将val1、val2-sel1和sel2注册为计算的的依赖项。这意味着,如果val1或val2..发生变化,则计算值也可能发生变化。因此,当可观测值(如val1)发生变化时,需要对计算值进行评估。这就是调用doSameWork函数的原因。

我希望它能有所帮助。