Knockout.js 订阅同一事件以获得淘汰赛中的多个观测值

Knockout.js 订阅同一事件以获得淘汰赛中的多个观测值,knockout.js,knockout-3.0,Knockout.js,Knockout 3.0,我试图用knockout实现以下行为:当一个用户提交他的登录名和密码时,它是错误的——向他显示错误消息。当用户更改任何输入时-隐藏消息 我用computed observable进行了尝试,了解到这不是正确的方法,在阅读了相关文档后,我发现。因此,当我订阅每个输入时,一切都很顺利。问题是我订阅了同一事件的两个观测值(因此复制了代码)。我知道我可以将重复的代码放入一个函数中,并将每个可观察的对象订阅到该函数中,但这在我看来也不太好 这句空话够了,下面是我的(点击make it error,然后在i

我试图用knockout实现以下行为:当一个用户提交他的登录名和密码时,它是错误的——向他显示错误消息。当用户更改任何输入时-隐藏消息

我用computed observable进行了尝试,了解到这不是正确的方法,在阅读了相关文档后,我发现。因此,当我订阅每个
输入时,一切都很顺利。问题是我订阅了同一事件的两个观测值(因此复制了代码)。我知道我可以将重复的代码放入一个函数中,并将每个可观察的对象订阅到该函数中,但这在我看来也不太好

这句空话够了,下面是我的(点击make it error,然后在
input
中键入一些内容),下面是我的做法:

this.loginText.subscribe(function () {
   self.isError(false);
});

this.passwordText.subscribe(function () {
   self.isError(false);
});

我试图阅读,但无法理解如何准确地订阅同一事件的多个观测值。

您应该使用computed observable。当相关可观测值发生变化时,每次计算可观测值。因此,您可以简单地列出计算可观察对象中的所有可观察对象(绑定到您的输入),并更改其中至少一个调用计算函数

function User() {
    var self = this;
        self.loginText      = ko.observable(null);
        self.passwordText   = ko.observable(null);
        self.isError        = ko.observable(false);

        self.makeWrong = function(){
            self.isError(true);
        }

        ko.computed(function() {
            self.loginText();
            self.passwordText();
            self.isError(false);
        });
    }

您应该使用计算的可观察值。当相关可观测值发生变化时,每次计算可观测值。因此,您可以简单地列出计算可观察对象中的所有可观察对象(绑定到您的输入),并更改其中至少一个调用计算函数

function User() {
    var self = this;
        self.loginText      = ko.observable(null);
        self.passwordText   = ko.observable(null);
        self.isError        = ko.observable(false);

        self.makeWrong = function(){
            self.isError(true);
        }

        ko.computed(function() {
            self.loginText();
            self.passwordText();
            self.isError(false);
        });
    }

您应该使用计算的可观察值。当相关可观测值发生变化时,每次计算可观测值。因此,您可以简单地列出计算可观察对象中的所有可观察对象(绑定到您的输入),并更改其中至少一个调用计算函数

function User() {
    var self = this;
        self.loginText      = ko.observable(null);
        self.passwordText   = ko.observable(null);
        self.isError        = ko.observable(false);

        self.makeWrong = function(){
            self.isError(true);
        }

        ko.computed(function() {
            self.loginText();
            self.passwordText();
            self.isError(false);
        });
    }

您应该使用计算的可观察值。当相关可观测值发生变化时,每次计算可观测值。因此,您可以简单地列出计算可观察对象中的所有可观察对象(绑定到您的输入),并更改其中至少一个调用计算函数

function User() {
    var self = this;
        self.loginText      = ko.observable(null);
        self.passwordText   = ko.observable(null);
        self.isError        = ko.observable(false);

        self.makeWrong = function(){
            self.isError(true);
        }

        ko.computed(function() {
            self.loginText();
            self.passwordText();
            self.isError(false);
        });
    }

如果您不想使用ko.computed,那么您可以使用extender。有关扩展器的详细信息

因此,对于相同的功能,将使用扩展器

ko.extenders.ErrorCheck = function(target, option) {
  target.subscribe(function(newValue) {
    console.log("new Value is " + newValue);
    self.isError(false);
  });
  return target;
}; 
可以观察到的是:-

this.loginText = ko.observable(null).extend({ErrorCheck:""});
this.passwordText = ko.observable(null).extend({ErrorCheck:""});

如果您不想使用ko.computed,那么您可以使用extender。有关扩展器的详细信息

因此,对于相同的功能,将使用扩展器

ko.extenders.ErrorCheck = function(target, option) {
  target.subscribe(function(newValue) {
    console.log("new Value is " + newValue);
    self.isError(false);
  });
  return target;
}; 
可以观察到的是:-

this.loginText = ko.observable(null).extend({ErrorCheck:""});
this.passwordText = ko.observable(null).extend({ErrorCheck:""});

如果您不想使用ko.computed,那么您可以使用extender。有关扩展器的详细信息

因此,对于相同的功能,将使用扩展器

ko.extenders.ErrorCheck = function(target, option) {
  target.subscribe(function(newValue) {
    console.log("new Value is " + newValue);
    self.isError(false);
  });
  return target;
}; 
可以观察到的是:-

this.loginText = ko.observable(null).extend({ErrorCheck:""});
this.passwordText = ko.observable(null).extend({ErrorCheck:""});

如果您不想使用ko.computed,那么您可以使用extender。有关扩展器的详细信息

因此,对于相同的功能,将使用扩展器

ko.extenders.ErrorCheck = function(target, option) {
  target.subscribe(function(newValue) {
    console.log("new Value is " + newValue);
    self.isError(false);
  });
  return target;
}; 
可以观察到的是:-

this.loginText = ko.observable(null).extend({ErrorCheck:""});
this.passwordText = ko.observable(null).extend({ErrorCheck:""});